티스토리 뷰
## 개요
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)
'Programming > Languages' 카테고리의 다른 글
[Unity] LogType & StackTraceLogType (& Log Level) (0) | 2023.03.17 |
---|---|
[C#] 현재 method 및 class 정보 얻기 (0) | 2023.03.01 |
[C#] 키워드들 interface, abstract, virtual, override, sealed 등등 (0) | 2023.02.28 |
- Total
- Today
- Yesterday
- Visual Studio Code
- await
- 닷넷
- 코루틴
- git
- Singleton
- framework
- VS2022
- Python
- unity
- Debug
- 싱글톤
- initialize
- RuntimeInitializeOnLoadMethod
- logging
- .net
- async
- Custom Package
- firestore
- vscode
- coroutine
- C#
- gcp
- 유니티
- Scraping
- Addressables
- github
- selenium
- 비동기
- 환경설정
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |