본문 바로가기

C

unity 변수 및 함수의 범위와 접근성 Scope and Access modifiers

 

클래스에서 정의되는 변수는 함수에서 정의되는 변수와 달리 그에 해당하는 접근 한정자가 있습니다.

Access modifier는 데이터 타입 앞에 배치되는 키워드이며, 변수 또는 함수가 보일수 있는 위치를 정의하데 활용됩니다.

Access modifiers  Public, Private

 

보통 다른 스크립트에서 변수나 함수에 접근해야하는 경우엔 public. 그외에는 private.

 

변수 1를 클래스에서 public으로 선언하게 되면, 클래스의 밖에서 변수에 접근할 수 있습니다.

또한 변수 1는 인스펙터의 컴포넌트에 표시되어 수정할 수 있습니다.

이렇게 선언된 변수 1은 스크립트 내에서 특정 값으로 초기화되더라도 인스펙터에서 작성된 값으로 오버라이드됩니다.

 

하지만 Start, Awake 같은 함수에서 변수가 선언되어 있으면, 인스펙터에서 변수가 이미 설정된 후에 값이 적용되므로 인스펙터 값으로 오버라이드되지 않습니다.

예를 들어 스크립트에서 기본값이 5로 초기화되어 있지만 인스펙터에 의해 오버라이드되었는데 Start함수에서 이걸 다시 수동으로 설정하므로 인스펙터에서 입력한 값을 다시 또 오버라이드합니다. 이제 play중인 씬에서 값을 다시 조정하면 스크립트 값이 다시 오버라이드됩니다. 또한 play 중인 씬에서 인스펙터를 통해 수정된 값은 play가 종료되면 값이 초기화되며, 인스펙터에 저장되지 않습니다.

 

private 변수는 오직 클래스 내에서만 수정할 수 있습니다.

C#에서 private은 접근 한정자가 지정되지 않은 모든 변수의 default 접근 한정자입니다. 아래의ScopeAndAccessModifiersClass 스크립트에서 private int beta = 0; 이 아닌 int beta = 0; 이라도 int 앞 private가 숨어있다는 말입니다.

 

ScopeAndAccessModifiersClass 스크립트에서는 AnotherClass 의 public 멤버에만 접근할 수 있습니다.

 

 

 

ScopeAndAccessModifiersClass

using UnityEngine;
using System.Collections;

public class ScopeAndAccessModifiers : MonoBehaviour
{
    public int alpha = 5; ScopeAndAccessModifiers클래스의 로컬변수
    
    
    private int beta = 0;
    private int gamma = 5;
    
    
    private AnotherClass myOtherClass;
    
    
    void Start ()
    {
        alpha = 29;
        
        myOtherClass = new AnotherClass();
        myOtherClass.FruitMachine(alpha, myOtherClass.apples);
    }
    
    
    void Example (int pens, int crayons)
    {
        int answer; //Example함수의 로컬변수
        answer = pens * crayons * alpha;
        Debug.Log(answer);
    }
    
    
    void Update ()
    {
        Debug.Log("Alpha is set to: " + alpha);
    }
}

 

 

AnotherClass

using UnityEngine;
using System.Collections;

public class AnotherClass
{
    public int apples;
    public int bananas;
    
    
    private int stapler;
    private int sellotape;
    
    
    public void FruitMachine (int a, int b)
    {
        int answer;
        answer = a + b;
        Debug.Log("Fruit total: " + answer);
    }
    
    
    private void OfficeSort (int a, int b)
    {
        int answer;
        answer = a + b;
        Debug.Log("Office Supplies total: " + answer);
    }
}

 

 

 

 

 

출처 - https://learn.unity.com/tutorial/beomwi-mic-aegseseu-hanjeongja?uv=2019.3&projectId=625e4bf5edbc2a03c37c9827

'C' 카테고리의 다른 글

unity Update FixedUpdate  (0) 2023.05.10
unity Awake and Start  (0) 2023.04.27
unity 루프 loop  (0) 2023.04.26
unity if문  (0) 2023.04.26
unity 규칙 및 구문  (0) 2023.04.25