Programing/C#

[Effective C#] 아이템2: const보다는 readonly가 좋다

Napoliano 2025. 2. 11. 22:53
728x90

 

 

 

컴파일타임 상수보다는 런타임 상수를 사용하라. 컴파일타임 상수가 약간 더 빠르긴 하지만 런타임 상수에 비해 유연성이 상당히 떨어진다. 컴파일타임 상수는 성능이 매우 중요하고 상수의 값이 절대로 바뀌지 않는 경우에만 제한적으로 사용하는 것이 좋다.

 

컴파일타임 상수와 비교되는 런타임 상수의 가장 중요한 차이는 상수의 값이 런타임에 평가된다는 점일 것이다. 런타임 상수를 참조하는 코드를 컴파일하면 컴파일타임 상수처럼 코드를 값으로 대체하지 않고, readonly 변수에 대한 참조 코드를 생성한다. 이러한 차이로 인해 간혹 호환성 문제가 발생하곤 한다.

 

Infrastructure라는 어셈블리 내에 const와 readonly 필드를 다음과 같이 정의했다고 하자.

public class UsefulValues
{
    public static readonly int StartValue = 5;
    public const int EndValue = 10;
}

 

다른 어셈블리에서 위의 값들을 사용하는 상황에서, Infrastructure 어셈블리를 다음과 같이 수정한 후, 응용프로그램 전체를 리빌드하지 않고 리블드한 Infrastructure 파일만 배포하는 경우를 생각해 보자.

public class UsefulValues
{
    public static readonly int StartValue = 105;
    public const int EndValue = 120;
}

 

다른 어셈블리에서는 StartValue는 수정된 값인 105로 사용되지만, EndValue는 여전히 10으로 유지된다. 이런 이유로 런타임 상수를 사용할 경우 응용프로그램을 완전히 리빌드하지 않더라도 관련 어셈블리의 변경 사항을 올바르게 반영할 수 있다.

 

 

 

 

 

 

728x90