[02] const보다는 readonly가 좋다

다음 본문은 도서 이펙티브 C# (빌 와그너)에서 나오는 주제를 다룹니다.

 

 

const와 readonly의 공통점

 - 두 키워드 모두 한번 값을 정한 뒤, 변경할 수 없게 하는 기능을 가지고 있다.

public const int myConst = 1000;
public static readonly int myRead = 2000;

 

컴파일타임 상수 const 

 - 컴파일 타임에 변수가 값으로 대체된다.

 - 내장된 숫자형, enum, 문자열, null에 대해서만 사용할 수 있다.

 - 변수 선언과 동시에 할당하며, 변경할 수 없다.

   (때문에 반드시 모든 클래스의 인스턴스가 동일한 값을 가진다)

 

런타임 상수 readonly

 - 런타임에 값이 평가된다. 상수에 대한 참조로 컴파일 된다.

 - 모든 타입에 대해 사용할 수 있다.

 - 멤버 초기화구문에서 초기화할 수도 있지만, 생성자 단계에서 최초 1회 할당할 수 있으며 이후에는 변경할 수 없다.

   (때문에 클래스의 인스턴스마다 값이 다를 수도있다) 

 

const보다 readonly를 사용해야하는 이유

 - const는 컴파일타임 상수라서, 값이 바뀌는 경우 프로젝트 전체를 재 컴파일해야 한다.

 - 컴파일타임 상수가 더 빠르긴 하지만, 유연성이 부족하다.

 - readonly는 생성자에서 초기화하여 사용할 수 있기 때문에 더 유연하다.

 

결론

 - 컴파일타임 상수(const)는 런타임 상수(readonly)가 더 빠르지만, 유연성이 떨어진다.

 - 때문에 컴파일타임 상수(const)는 그 값이 절대로 바뀌지 않는 경우에만 제한적으로 사용하도록 하자. 

 

 

댓글

Designed by JB FACTORY