C#에서 readonly는 수정이 않되는 읽기 전용 키워드이다.
const 또한 변경 불가능한 값을 의미한다.
C#에서는 두개 모두 사용할 수 있지만 이 둘은 내부적으로 다르게 작동한다.
readonly float gravity;
readonly는 런타임 상수로 값이 런타임 시 결정 되고 런타임에 상수에 대한 참조이다.
또한 힙에 위치하며 생성자에서 초기화가 가능하다.
그리고 어떤 자료 타입에서도 사용 가능하다.
const float Gravity = 9.81f;
const는 컴파일 타임 상수로 컴파일 될 때 값이 결정 된다.
또한 스택에 위치하며 선언과 동시에 값이 할당 되어야한다.
그리고 내장 자료형만 사용가능하기에 사용자 정의 클래스는 사용할 수 없다.
결론부터 말하면 readonly가 좋다.
오직 readonly만 상수에 대한 참조 코드를 생성한다.
그렇기에 const는 값을 변경할려면 참조하는 모든곳은 전부 다시 컴파일해야한다.
만약 다시 하지 않으면 이전의 const값을 가지게 되는 문제가 생길 것이다.
다만 readonly는 참조를 가지고 있으므로 일부만 컴파일하여도 이를 참조하는 다른 코드는 새로운 값을 사용할 수 있다.
const는 스택에 있어 빠르다는 장점을 가지고 있지만 그외의 유연성이 비교적 적어 readonly를 사용하는것이 좋다.