C# 프로그래밍에서 const와 readonly는 모두 값을 변경할 수 없게 만드는 키워드지만, 초기화 시점과 동작 방식에서 중요한 차이가 있습니다. 두 키워드의 특징을 자세히 살펴보겠습니다.
const 키워드란?
const(상수) 필드는 한 번 선언되면 절대 수정할 수 없는 필드입니다. 상수 필드는 반드시 선언과 동시에 값을 할당해야 하며, 그 값은 컴파일 시점에 고정됩니다.
const int a = 5;
위 코드처럼 선언하는 순간 값이 지정되며, 이후 프로그램 어디에서도 이 값을 변경할 수 없습니다.
readonly 키워드란?
readonly(읽기 전용) 필드는 선언 시점에 초기화하거나, 생성자 내부에서 값을 설정할 수도 있습니다. 이는 런타임에 값이 결정될 수 있다는 의미로, const와의 가장 큰 차이점입니다.
다음은 생성자 안에서 readonly 필드를 초기화하는 예제입니다.
예제
class Calculate {
readonly int z;
public Demo() {
z = 20;
}
}
위 예제에서 z는 선언 시 값을 할당하지 않고, 생성자 Demo()가 호출될 때 20으로 초기화됩니다. 생성자 실행이 끝난 후에는 더 이상 값을 변경할 수 없습니다.
const와 readonly 주요 차이점 비교
- 초기화 시점: const는 선언 시 반드시 초기화해야 하지만, readonly는 선언 시 또는 생성자에서 초기화할 수 있습니다.
- 값 결정 시점: const는 컴파일 타임에 값이 고정되고, readonly는 런타임에 값이 결정될 수 있습니다.
- 사용 가능한 형식: const는 기본 데이터 형식(int, double, string 등)처럼 컴파일 타임에 계산 가능한 값에만 사용할 수 있으며, readonly는 클래스 객체를 포함한 모든 형식에 적용할 수 있습니다.
- 버전 관리: const 값은 참조하는 어셈블리를 다시 컴파일해야 변경 사항이 반영되지만, readonly는 런타임에 값을 읽기 때문에 재컴파일 없이도 최신 값이 적용됩니다.
정리
컴파일 시점부터 절대 변하지 않는 고정 값이라면 const를, 런타임 조건에 따라 값이 정해지고 이후에는 변경되지 않아야 한다면 readonly를 사용하는 것이 좋습니다. 두 키워드의 차이를 정확히 이해하면 더 안전하고 유지보수하기 쉬운 C# 코드를 작성할 수 있습니다.