[C#] Const와 Readonly

박현민·2024년 11월 21일

유니티

목록 보기
5/6
post-thumbnail

값이 변경되지 않는 읽기 전용 상수

c#에서 값이 변경되지 않도록 하는 용도의 constreadonly 두 종류의 상수가 있다

각각 값이 변경되지 않는 용도로 사용되지만, 각각 동작 방식과 사용 방식에 차이가 있다.

Const


const 는 컴파일 시간에 결정되는 상수이다.

한 번 값을 할당하면 이후에 변경이 불가능하며, 반드시 선언과 동시에 값을 할당해야 한다.

또한, const값 형식이나 문자열처럼 기본 데이터 형식에만 사용이 가능하다

static 키워드 없이도 자동으로 정적 취급이 되어서 스택에 값이 할당 된다.

public class Test
{
		public const int MAX_VALUE = 100;
}

class Program : MonoBehaviour
{
		void Start()
		{
				Debug.Log(Test.MAX_VALUE); // 100 출력
		}
}

장점

  • 모든 인스턴스에서 동일한 값을 공유하므로 메모리를 절약할 수 있다.
  • 컴파일 타임에 상수의 값이 고정되므로 런타임 성능이 좋다.

단점

  • 선언과 동시에 값을 할당해야 하고, 실행 시점에 값을 변경하거나 할당할 수 없기에 유연성이 부족하다.
  • 만약 const 값을 수정하려면 이 코드를 사용하는 모든 코드가 재컴파일되어야 한다.

Readonly


readonly 는 런타임에 값을 할당할 수 있지만, 한 번 할당된 이후에는 값을 변경할 수 없다.

주로 생성자에서 값을 할당하는 경우에 사용된다.

참조형과 값 형식 모두 사용할 수 있으며, 컴파일 시간에는 값이 정해지지 않을 수 있다.

public class Test
{
		public readonly int MAX_VALUE;
		
		public Test(int maxValue)
		{
				MAX_VALUE = maxValue;
		}
}

public class Program : MonoBehaviour
{
		void Start()
		{
				Test test = new Test(100);
				Debug.Log(test.MAX_VALUE);
		}
}

장점

  • 값을 생성자에서 동적으로 설정할 수 있기에 객체마다 다른 값을 가질 수 있어 유연하다.
  • 값 형식 뿐이 아니라 참조형 데이터도 사용할 수 있어 범용성이 크다.

단점

  • const 에 비해 런타임 시점에 값이 결정되므로 성능이 조금 떨어질 수 있다.
  • 객체마다 할당될 수 있기 때문에 메모리 사용량이 증가할 수 있다.
profile
자라고 있는 게임개발자

0개의 댓글