본문 바로가기
게임개발/Effective C#

[Effective C#] 2. const vs readonly

by 개발도사(진) 2023. 11. 7.

성능이 아주 중요하고, 상수의 값이 절대 바뀌지 않는 경우에만 const를 사용하고, 그 외에는 readonly를 사용한다.

 

C#의 상수는 두 유형으로 나뉜다. const로 선언되는 상수는 compile-time 상수, readonly로 선언되는 함수는 runtime 상수이다.

 

compile-time 상수는 컴파일 시에 그 값이 아예 literal로 대체된다. 따라서 compile-time 상수는 내장 숫자형, enum, 문자열, null만 사용 가능하며, 메서드 내부에서도 선언할 수 있다.

runtime 상수는 컴파일 시에 해당 변수에 대한 참조 코드를 생성한다. runtime 상수는 구조체, 클래스에 대해서도 사용할 수 있지만, 메서드 내부에서 선언할 수 없다.

 

상술한 특별한 경우에만 const를 사용하고 그 외에 readonly를 사용할 것을 권유하는 이유는 향후 어떠한 이유에서 수정이 가해질 때, compile-time 상수로 선언된 부분의 변화를 반영하려면 해당 compile-time 상수에 대한 참조가 있는 모든 부분을 아예 새로 컴파일해야 하지만, runtime 상수로 선언된 부분의 경우 해당 부분만 수정하는 코드를 배포하여 전체 응용 프로그램에 수정사항을 반영할 수 있기 때문이다.