C#에서 const와 readonly는 변수를 선언할 때 사용되며, 불변성을 부여하는 데 사용됩니다. 이 두 키워드는 변수에 저장된 데이터를 변경할 수 없도록 제한하지만, 그 사용 방식과 적용 시점에 차이가 있습니다.
const 키워드는 상수를 선언할 때 사용됩니다. const로 선언된 변수는 컴파일 시간에 값이 결정되어야 하며, 프로그램 전체에서 변경할 수 없는 고정된 값으로 처리됩니다.
특징과 사용법:
예시:
public class MyClass {
public const int MyConstInt = 10;
public const string MyConstString = "Hello";
}
readonly 키워드는 실행 시간에 한 번 초기화된 후 변경할 수 없는 변수를 선언하는 데 사용됩니다. readonly 변수의 초기화는 선언 시 또는 생성자 내에서만 가능합니다.
특징과 사용법:
예시:
public class MyClass {
public readonly int MyReadOnlyInt;
public readonly string MyReadOnlyString;
public MyClass(int initialValue) {
MyReadOnlyInt = initialValue;
MyReadOnlyString = "Hello";
}
}
둘 중 가장 큰 차이는 readonly는 상수에 대한 참조 코드를 생성한다는 점입니다. 때문에 const의 값을 변경하게 된다면 이를 사용하는 곳은 전부 재컴파일해야 합니다. 만일 하지 않으면 이전의 const 값으로 되어 있어 문제가 될 수 있습니다. 다만 readonly의 경우에는 일부만 리빌드 해도 이를 사용하는 다른 코드들은 참조를 가지고 있으므로 리빌드 없이 올바르게 사용이 가능합니다.
때문에 가급적 readonly를 사용하는게 좋습니다.