C#에서는 const 키워드로 배열을 직접 선언할 수 없습니다. 대신 readonly 키워드를 사용하여 상수 배열처럼 동작하도록 선언해야 합니다.
readonly 키워드 사용하기
가장 일반적인 방법은 static readonly 조합을 활용하는 것입니다.
public static readonly string[] a = { "Car", "Motorbike", "Cab" };const와 달리 readonly는 런타임에 값을 설정할 수 있다는 장점이 있습니다. 즉, 생성자에서 초기화하거나 실행 시점에 결정되는 값으로 배열을 초기화할 수 있습니다.
ReadOnlyCollection 활용하기
배열 자체의 요소 변경까지 완전히 차단하고 싶다면 ReadOnlyCollection<T>를 사용하는 것이 더 안전한 방법입니다.
public ReadOnlyCollection<string> a { get { return new List<string> { "Car", "Motorbike", "Cab" }.AsReadOnly(); } }위 방식은 프로퍼티에 접근할 때마다 새로운 리스트와 읽기 전용 컬렉션을 생성한다는 점에 유의해야 합니다.
.NET Framework 4.5 이상에서의 개선된 방법
.NET Framework 4.5부터는 자동 구현 프로퍼티 초기화 구문을 활용하여 더 간결하게 작성할 수 있습니다.
public ReadOnlyCollection<string> a { get; } = new ReadOnlyCollection<string>(
new string[] { "Car", "Motorbike", "Cab" }
);이 방식은 컬렉션이 한 번만 생성되며 외부에서 수정할 수 없어 불변성(immutability)이 보장됩니다. 성능과 안정성 측면에서 가장 권장되는 패턴입니다.
정리
- static readonly 배열: 간단하지만 배열 요소는 변경 가능
- ReadOnlyCollection: 요소 변경까지 완전히 차단하여 안전함
- .NET 4.5+ 자동 프로퍼티 초기화: 간결하고 불변성 보장