🌍 C# Study/이펙티브 C#
[02] const보다는 readonly가 좋다
맨텀
2021. 4. 22. 15:44
다음 본문은 도서 이펙티브 C# (빌 와그너)에서 나오는 주제를 다룹니다.
const와 readonly의 공통점
- 두 키워드 모두 한번 값을 정한 뒤, 변경할 수 없게 하는 기능을 가지고 있다.
public const int myConst = 1000;
public static readonly int myRead = 2000;
컴파일타임 상수 const
- 컴파일 타임에 변수가 값으로 대체된다.
- 내장된 숫자형, enum, 문자열, null에 대해서만 사용할 수 있다.
- 변수 선언과 동시에 할당하며, 변경할 수 없다.
(때문에 반드시 모든 클래스의 인스턴스가 동일한 값을 가진다)
런타임 상수 readonly
- 런타임에 값이 평가된다. 상수에 대한 참조로 컴파일 된다.
- 모든 타입에 대해 사용할 수 있다.
- 멤버 초기화구문에서 초기화할 수도 있지만, 생성자 단계에서 최초 1회 할당할 수 있으며 이후에는 변경할 수 없다.
(때문에 클래스의 인스턴스마다 값이 다를 수도있다)
const보다 readonly를 사용해야하는 이유
- const는 컴파일타임 상수라서, 값이 바뀌는 경우 프로젝트 전체를 재 컴파일해야 한다.
- 컴파일타임 상수가 더 빠르긴 하지만, 유연성이 부족하다.
- readonly는 생성자에서 초기화하여 사용할 수 있기 때문에 더 유연하다.
결론
- 컴파일타임 상수(const)는 런타임 상수(readonly)가 더 빠르지만, 유연성이 떨어진다.
- 때문에 컴파일타임 상수(const)는 그 값이 절대로 바뀌지 않는 경우에만 제한적으로 사용하도록 하자.