H

Practice wishful thinking.

ITEM 2 :: EFFECTIVE C#


안녕하세요, 두번째 시간입니다.


벌써 두번째 시간이네요.

첫걸음이 어렵지, 두번째는 안 어렵다는 말이 맞는 것 같아요. 물론, 공부하는 건 별개의 문제지만요.

2번째 아이템은 바로, Const보다는 readOnly를 사용하는 것이 좋다 입니다.

간단한 설명과, 장점과 단점, 그리고 정리하여 전체적으로 서술 하겠습니다. 역시 먼저, 설명부터.

설명

  1. readOnly는 런타임 상수, Const는 컴파일 상수를 선언할 때 사용한다.

  2. C#뿐만 아니라, 대부분의 IDE나, 그외 개발툴에서는 런타임과 컴파일타임을 엄중하게 나눠서 진행한다.

  3. 두 개는 비슷해보여도 내부적으로 접근하는 방법이 달라, 선언의 위치도 서로 다르다. 그리고 그에 따라 성능의 차이 역시 존재한다.

  4. 컴파일 타임에 컴파일 상수의 경우, 컴파일 시에 그 값을 대체하므로, 내장 자료형에 대해서만 값으로 대체될 수 있고, 런타임은 생성자에서 값을 초기화 할 수 있기 때문에, 내장 자료형이 아니더라도 상관이 없다.

  5. 3번에서 설명한 접근하는 방법과 위치는 다음과 같다. 컴파일 상수의 경우, 컴파일 타임에 접근하게 되고, 런타임 상수는 말 그대로 런타임시에 값이 결정된다. 그렇기 때문에, 런타임 상수는 생성자에서 초기화 할 수 있지만, 그외 메소드에서는 초기화할 수 없으며, 컴파일 상수는 메서드 내부에서도 선언은 할 수 있지만, 내장 자료형을 맞춰줘야 한다는 점이 있다.

readOnly의 장점과 단점

  1. 런타임에 실행되므로, 생성자에서 초기화할 수 있고, 그외에는 수정할 수 없지만, 생성자에서 초기화할 수 있기 때문에 대부분의 타입형을 사용할 수 있다.

  2. 1번의 이유로 유연성이 Const에 비해 좋다. 하지만, 미세하기 Const보다 성능상 속도가 느리다.

Const의 장점과 단점

  1. readOnly에 비해 속도가 빠르다. 하지만, 내장 자료형(INT, CHAR, ENUM, NULL)에 한해서만 선언할 수 있다(그래야만 컴파일 타임에 컴파일 상수의 값이 대체되므로)

  2. 1번의 이유로 유연성은 떨어지나 미세하게 Const보다 속도가 빠르다.

정리

결국, 성능을 선택한다면, Const가 좋을 것이고(이부분에서는 값이 변경되지 않을 상수에 한해서만 컴파일 상수로 선언하도록 권하고 있다.) 유연성을 선택한다면 readOnly가 좋다는 말인데, 책의 사족에는 이런 말도 있다. 내부적인 성능차이가 Const와 차이가 크지 않다, 미세한 차이다, 라는 말이 있다. 즉, 특별한 상황, 값을 고정시켜놓고 바꾸지 않을 특별한 컴파일 상수를 만들 떄를 제외하고는 대부분 readOnly를 사용한 런타임 상수를 사용하는 편이 좋다는 것!