2010.04.02 04:27 책 정리/Effective C#

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# 에서 확실하게 두개로 나눈것 이라고 이해 된다.
  • 졸리다. 자자.


posted by 농사를 짓는 게임 프로그래머 최익필
TAG , ,

댓글을 달아 주세요