다음 본문은 도서 이펙티브 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)는 그 값이 절대로 바뀌지 않는 경우에만 제한적으로 사용하도록 하자.
'🌍 C# Study > 이펙티브 C#' 카테고리의 다른 글
[06] nameof() 연산자를 적극 활용하라 (0) | 2021.04.22 |
---|---|
[05] 문화권별로 다른 문자열을 생성하려면 FormattableString을 사용하라 (0) | 2021.04.22 |
[04] string.Format()을 보간 문자열로 대체하라 (0) | 2021.04.22 |
[03] 캐스트보다는 is, as가 좋다 (0) | 2021.04.22 |
[01] 지역변수를 선언할 때는 var를 사용하는 것이 낫다. (0) | 2021.04.20 |