C# const, readonly

김현승·2024년 4월 27일
0

C#

목록 보기
5/13

C#에서 const와 readonly는 변수를 선언할 때 사용되며, 불변성을 부여하는 데 사용됩니다. 이 두 키워드는 변수에 저장된 데이터를 변경할 수 없도록 제한하지만, 그 사용 방식과 적용 시점에 차이가 있습니다.

const (상수)

const 키워드는 상수를 선언할 때 사용됩니다. const로 선언된 변수는 컴파일 시간에 값이 결정되어야 하며, 프로그램 전체에서 변경할 수 없는 고정된 값으로 처리됩니다.

특징과 사용법:

  • const 변수는 반드시 선언과 동시에 초기화되어야 합니다.
  • 컴파일 타임에 값이 할당되므로, 리터럴 값이나 다른 const 변수의 계산 결과만 할당할 수 있습니다.
  • const는 메서드, 속성, 이벤트 내에서 사용할 수 없으며, 주로 클래스 또는 구조체의 멤버로 사용됩니다.
  • 값 타입과 참조 타입 모두에 사용할 수 있지만, 참조 타입의 경우 null이나 문자열 리터럴(불변 참조 타입)에만 사용할 수 있습니다.

예시:

public class MyClass {
    public const int MyConstInt = 10;
    public const string MyConstString = "Hello";
}

readonly

readonly 키워드는 실행 시간에 한 번 초기화된 후 변경할 수 없는 변수를 선언하는 데 사용됩니다. readonly 변수의 초기화는 선언 시 또는 생성자 내에서만 가능합니다.

특징과 사용법:

  • readonly 변수는 선언 시 또는 모든 생성자에서 초기화할 수 있습니다. 이를 통해 런타임에 한 번 값이 할당되면, 그 이후로는 값을 변경할 수 없습니다.
  • readonly는 값 타입과 참조 타입 모두에 사용될 수 있으며, 참조 타입의 경우 초기화 이후에 객체의 상태를 변경할 수 있지만, 참조 자체는 변경할 수 없습니다 (즉, 새 객체를 할당할 수 없습니다).
  • readonly는 인스턴스 레벨에서 동작합니다. 따라서 같은 클래스의 다른 인스턴스는 서로 다른 readonly 값을 가질 수 있습니다.

예시:

public class MyClass {
    public readonly int MyReadOnlyInt;
    public readonly string MyReadOnlyString;

    public MyClass(int initialValue) {
        MyReadOnlyInt = initialValue;
        MyReadOnlyString = "Hello";
    }
}

주요 차이점

  • 초기화 시점: const는 컴파일 시점에 값이 할당되며, readonly는 런타임에 할당됩니다.
  • 저장 위치: const 값은 바이너리에 직접 저장되며, readonly는 메모리(힙)에 저장됩니다.
  • 변경 가능성: const는 프로그램 전체에서 변경할 수 없으며, readonly는 생성자에서는 값을 할당할 수 있지만 그 후에는 변경할 수 없습니다.

const vs readonly

둘 중 가장 큰 차이는 readonly는 상수에 대한 참조 코드를 생성한다는 점입니다. 때문에 const의 값을 변경하게 된다면 이를 사용하는 곳은 전부 재컴파일해야 합니다. 만일 하지 않으면 이전의 const 값으로 되어 있어 문제가 될 수 있습니다. 다만 readonly의 경우에는 일부만 리빌드 해도 이를 사용하는 다른 코드들은 참조를 가지고 있으므로 리빌드 없이 올바르게 사용이 가능합니다.
때문에 가급적 readonly를 사용하는게 좋습니다.

0개의 댓글