
c#에는 const와 readonly로 2종류의 상수가 있다.
둘 다 값이 변경되지 않도록 하는 용도로 사용되지만(상수), 각각의 동작 방식과 사용 시점에 차이가 있다.
const
const 키워드는 컴파일 시간 상수(constant)를 선언하는 데 사용된다
const로 선언된 상수는 반드시 선언과 동시에 초기화되어야 한다.
const로 선언된 상수는 컴파일 시간에 그 값이 결정되며, 이후에는 절대로 변경할 수 없다.
주로 숫자, 문자열 등의 기본 데이터 타입에 사용된다.
내장자료형 (float, int, enum, string...)에 대해서만 사용 할 수 있다.
암시적으로 static(정적) 필드로 처리된다.
메모리 할당 위치는 스택 메모리이다.
readonly
readonly 키워드는 런타임 상수(read-only)를 선언하는 데 사용된다.
초기화된 이후에는 값을 변경할 수 없다. 단 생성자에서 한번 초기화 할 수 있다.
모든 자료형에 사용 가능 하다.
메모리 할당 위치는 힙 메모리이다.
const: 컴파일 시간 상수, 선언 시 초기화 필요, 기본 데이터 타입에 주로 사용.
readonly: 런타임 상수, 생성자에서 초기화 가능, 객체의 인스턴스 변수로 주로 사용.
const의 메모리 영역이 스택 메모리이기 때문에 장점이 있어 보이지만 const는 컴파일 상수이기 때문에 값이 변경되면 프로젝트를 모두 다시 컴파일링 해줘야 한다.
반면 readonly는 생성시 선언하지 않아도, 생성자에서 초기화 하여 사용 할 수 있기 때문에 유연하며, 실제 사용하는 단계에서 변수의 값을 가져오는 장점이 존재한다.
자신의 상황을 고려하여 어떠한 상수를 사용해야 할지 고려해봐야 한다.