Programing/Unity(C#)

[C#] const, readonly, static

hye3193 2024. 3. 14. 20:49

static

여러 객체가 같은 값을 공유해야 할 때 사용한다

public class Counting()
{
    public static int staticCount = 0;
    public int count = 0;
    
    public Counting()
    {
        staticCount++;
        count++;
    }
}

위와 같이 클래스를 선언한 다음, 아래와 같이 다른 클래스에서 해당 클래스로 인스턴스를 생성한다면

public class Scene()
{
    private void Start()
    {
        Counting count1 = new Counting();
        Counting count2 = new Counting();
        Counting count3 = new Counting();
        
        int count = Counting.staticCount;
    }
}

count1, 2, 3 각각의 클래스 내의 count 변수 값의 경우, count++ 명령어가 각 1번씩만 실행되었으므로 1이 나온다

하지만 Counting 클래스의 staticCount 값을 출력해 보면 총 3번이 실행되었으므로 3이 나오게 된다

 

Const

컴파일 상수라고도 부르며, 반드시 선언과 동시에 초기화시켜 주어야 한다

초기화 이후에 값을 변경할 수 없다

public const float PI = 3.14;

프로그램을 짤 때 반복되는 값을 상수로 선언할 때 쓰인다

 

public class Define()
{
    public const float PI = 3.14;
}

public class Game()
{
    private void Start()
    {
        Debug.Log(Define.PI);    
    }
}

클래스 내에 상수를 선언해 두면, static 변수와 동일하게 클래스명을 이용해 해당 상수값을 가져올 수 있다

 

Readonly

Const과 비슷하며, 런타임 상수라고도 부른다

선언과 동시에 초기화하거나, 생성자 내에서 초기화시켜줘야 한다

함수 내부에서는 선언이 불가능하다

 

클래스명을 이용해 상수값을 가져올 수 없고, 인스턴스명을 통해서만 값에 접근할 수 있다