티스토리 뷰

## 개요

C#은 두가지 상수형을 제공한다

각자의 특성에 맞게 올바르게 사용해야한다

 

## const

public const int MILLENNIUM = 2000;

- compile-time 상수

- 컴파일시에 const 상수형 변수가 사용되는 위치(code)가 실질적인 값으로 치환

- readonly에 비해 다소 빠르지만 유연성이 떨어짐

  - 변수 선언시에만 초기화 가능 (생성자를 통해 동적 초기화 불가)

  - 내장자료형(정수형, 실수형 등)이나 enum, string에 대해서만 선언 가능. 즉, 숫자와 문자열에 한해서만 사용가능.

  - 기본적으로 static이므로 동일타입의 여러 인스턴스에서도 항상 같은 값

- 서비스 기간동안 불변값이어야하고 피치못할 변경 발생시 참조하는 모든 어셈블리 재컴파일 후 재배포 필요

 

## readonly

public static readonly int THIS_YEAR = 2023;

- runtime 상수

- 컴파일시에 readonly 상수형 변수가 사용되는 위치가 참조값으로 치환

- const에 비해 다소 느리지만 유연성이 좋음

  - 변수 선언시 또는 생성자에서 초기화 가능 (생성자 호출이 완료된 이후에는 초기화 불가)

  - 어떤 자료형으로도 선언 가능 (대표적으로 1회만 초기화 되어야 하는 singleton의 private instance 멤버변수)

  - 동일타입의 인스턴스별로 서로 다른 값 (static 선언을 통해 같은 값으로도 설정 가능)

- 초기화 이후 프로그램 동작동안 불변값. 변경 발생시 해당 변수가 선언된 어셈블리만 재컴파일 및 배포가능

 

## 결론

- readonly 대신 const를 사용했을때 유일한 장점은 수행성능

- const는 수행성능이 매우 중요하고, 상수의 값이 절대로 바뀌지 않는 경우에 한해서만 사용하는것이 좋다.

- 즉 평소엔 readonly를 주로 사용하고 const는 필요하다고 판단되는 시점에만 readonly를 대체해서 사용하자

 

## References

- 책 Effective C# (Bill Wagner)

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함