Unity C# 개발에서 const
와 readonly
는 모두 변경 불가능한(immutable) 값을 정의하는 데 사용되지만, 그 사용법과 적용 범위에 차이가 있습니다.
1. const
(Constants)
정의: const
는 컴파일 시간에 결정되는 상수 값을 정의합니다. 한 번 값이 할당되면, 프로그램 전체에서 그 값은 변경될 수 없습니다.
사용 사례: 주로 변하지 않는 값에 사용됩니다. 예를 들어, 수학적 상수(π, e 등), 설정 값 등이 있습니다.
범위: const
는 기본 데이터 타입(int, float, double, string 등)과 함께 사용됩니다. 객체 참조에는 사용할 수 없습니다.
컴파일 시간: const
값은 컴파일 시간에 결정되며, 다른 어셈블리에서 참조될 때 해당 값이 직접 복사됩니다.
예시:
public const float Pi = 3.14159f;
2. readonly
정의: readonly
는 런타임에 한 번만 할당될 수 있는 변수를 정의합니다. 이 할당은 변수 선언 시 또는 클래스의 생성자에서만 가능합니다.
사용 사례: 주로 런타임에 초기화되어야 하지만 그 이후에는 변경되지 않아야 하는 값에 사용됩니다. 예를 들어, 유니티에서 게임 오브젝트의 참조, 구성 설정 값 등이 있습니다.
범위: readonly
는 모든 타입의 데이터(기본 데이터 타입 및 객체 참조)에 사용할 수 있습니다.
런타임: readonly
변수의 값은 런타임에 할당되며, 다른 어셈블리에서 참조될 때 실제 변수에 대한 참조를 사용합니다.
예시:
public readonly GameObject myGameObject;
차이점 요약
- 초기화 시점:
const
는 컴파일 시점에 초기화되고, readonly
는 런타임 시점(주로 생성자 내에서)에 초기화됩니다.
- 타입 제한:
const
는 값 형식과 문자열에만 사용될 수 있지만, readonly
는 모든 타입에 사용될 수 있습니다.
- 참조 방식:
const
는 다른 어셈블리에서 참조될 때 값이 복사되어 사용되는 반면, readonly
는 참조에 의해 사용됩니다.
Unity 개발에서 이러한 특성을 이해하고 적절한 상황에 맞게 const
와 readonly
를 사용하는 것이 중요합니다.