공통점
- 런타임에 값을 변경할 수 없다.
차이점
Static Readonly
-
필드 선언문 또는 정적 생성자에서만 값을 초기화할 수 있다.
-
값을 초기화하지 않으면 해당 타입의 기본값으로 초기화된다.
-
런타임 초기에 값이 고정된다.
-
값이 정해지면 변하지 않지만, 결국 변수이기 때문에 참조 오버헤드가 발생한다.
Const
-
필드 선언문에서만 값을 초기화할 수 있다.
-
값을 초기화해야만 한다.
-
컴파일 타임에 값이 고정된다.
-
리터럴처럼 사용될 수 있다.(예 : switch문의 case 값)
-
어셈블리가 나뉘었을 때(const 필드가 존재하는
provider.dll, 이를 참조하는consumer.dll),
provider에서의 const 필드 값이 변경되고 재컴파일되어도consumer에서 참조하는 필드 값은 변경되지 않는다.
이는consumer의 컴파일 타임에 이미 해당 값이 고정되었기 때문이며, 변경사항을 적용하려면consumer역시 다시 컴파일해야만 한다.