[C#] const VS readonly

|


+상수를 정의하는데 2가지의 종류의 한정자(CONST,READONLY)를 사용 할 수 있습니다.

하지만 이름이 다른만큼 차이가 존재합니다. 가장 큰 차이점은 CONST는 컴파일 타임에 처리가 되는 반면 READONLY는 런타임에 처리가 됩니다. 즉, CONST는 변수를 정의할 때 초기화 되고 변경을 할 수가 없습니다.  READONLY는 두 가지 방법으로 초기화 할 수가 있습니다.하나는 변수를 정의할 때 초기화를 하거나 아니면 생성자나 내부 메소드에서 한번 초기화를 한 후에 변경을 할 수가 없습니다.


+결론을 먼저 말씀드리면, 두 한정자중에서 어떤것을 선택할 지는 아래의 기준을 따릅니다.

1.절대 변하지 않는 값은 CONST를 사용한다.(1년은 12개월, 1시간은 60분, 1분은 60초 처럼..)

2.절대 변하지 않는것 이외의 것은 모두 READONLY를 사용한다.



예전에 Effective C#을 포스팅하면서 ITEM 2에 있는 내용을 다시 정리해봤습니다.

(http://hongjinhyeon.tistory.com/54)




[READONLY의 장점들]


1.CONST는 내장 자료형과 enums, string만을 사용이 가능하지만 READONLY는 모든 자료형이 가능하다.


2.가장 중요한 차이점은 READONLY는 런타임에 평가가 된다. 


3.하나의 어셈블리에서 CONST에 값을 할당하고 다른 어셈블리에서 참조해서 빌드 하면, 참조하는 어셈블리에서는 해당 CONST의 값이 설정이되어있기 때문에 원래의 어셈블리에서 CONST값을 변경을 하면 반드시 참조하는 어셈블리도 리빌드해 줘야 된다. 하지만 READONLY를 쓰면 런타임에 값을 참조하기 때문에 참조되는 어셈블리만 리빌드만 되어있으면 이상이 없이 원하는 결과를 얻을 수 있다. 즉, CONST를 사용하면 배포한 후에 업데이트 시에 참조되는 모든 어셈블리를 모두 리빌드해야하는 문제점이 발생한다.




And