Purpose-built post
이 포스트는 "Effective C# - Item 2, const 보다는 readonly가 더 좋다"를 읽고 개인적인 생각을 정리하기 위해 만들었다. - 익필
Content
제목에서 알 수 있듯이, 전반적으로 readonly 가 더 좋다는 이야기로 책에선 설명한다. 그렇다면, const 와 readonly 가 무엇이며, 왜 더 좋은지 알 필요가 있을 것이다.
1. const, readonly 가 무엇인가?
- 사용 형태로 정의 하면, 변수를 변하지 못하는 변수로 만들어 주는 C# 키워드 이다.
C# 에서 const 는 컴파일타임 상수이며, readonly 는 런타임 상수이다. const 는 내장자료형(정수형,실수형, enum, string)에 대해서만 쓸 수 있으며, 변수 선언과 동시에 사용 해야 한다.
readonly 는 모든 자료형에 사용 할 수 있으며, 런타임에 이루어진다. 그러므로, 반드시 생성과 동시에 초기화 할 필요는 없다. 단. 생성자 단계에서 단 1번 할당을 통해 초기화 할 수 있다.
2. static readonly 는 무엇인가?
마찬가지로 상수이며, 스태틱 생성자에서 초기화 할 수있다. 클래스 이름으로 접근 할 수 있다.
3. 왜 const 보다 readonly 가 더 좋은가?
바로 유연성 때문이다.
4. 왜 readonly 더 유연한가?
const 는 컴파일 상수이기 때문에, 실제로 const로 선언된 변수가 사용 되면, 변수에 대한 참조가 아닌, 실제 상수로 치환되어 사용 된다. 이렇게 const 로 선언 되면, 약간이나마 수행 성능(정말 티가 날지는 모르겠다.)이 좋아지겠지만, const 변수 변경시, 매번 전체 재컴파일을 실행 해야 한다.
왜냐하면, const 변수는 컴파일 상수이므로, 이 변수가 쓰인 모든 어셈블리에 실제 상수가 치환되어 있다. 그렇기 때문에, 다시 치환하여 코드를 생성해야 하므로, 전체 재컴파일을 해야 한다.
이는 readonly 와 분명한 차이 이다.
Digression
- C++ 에서 const가 컴파일 상수 런타임 상수 둘다 처리 하는 키워드였다면, C# 에서 확실하게 두개로 나눈것 이라고 이해 된다.
- 졸리다. 자자.
'책 정리 > Effective C#' 카테고리의 다른 글
item 10, GetHashCode()의 함정을 유의하라 (0) | 2010.06.27 |
---|---|
item 9, ReferenceEquals(), static Equals(), instance Equals(), operator==의 상호 연관성을 이해해라. (0) | 2010.06.26 |
item 8, value 타입을 사용할 때 0이라는 값이 의미를 가질 수 있도록 하라 (0) | 2010.06.24 |
item 7, immutable atomic value 타입이 더 좋다 (0) | 2010.06.23 |
item 6, value 타입과 reference 타입을 구분하라. (0) | 2010.06.20 |
Item 5, 항상 ToString()을 작성하라. (0) | 2010.06.11 |
item 4, #if 대신 Conditional Attribute를 사용하라. (0) | 2010.06.05 |
item 3, cast보다는 is나 as가 좋다. (0) | 2010.04.05 |
Item 1, 데이터 멤버 대신에 항상 프로퍼티를 사용하라 (0) | 2010.03.31 |
Effective C# 을 읽는다. (711) | 2010.03.30 |
최근댓글