티스토리 뷰
## 개요
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
- RuntimeInitializeOnLoadMethod
- framework
- Python
- 닷넷
- VS2022
- gcp
- async
- Custom Package
- 환경설정
- coroutine
- Singleton
- 코루틴
- Addressables
- Scraping
- logging
- vscode
- Debug
- Visual Studio Code
- 싱글톤
- selenium
- initialize
- git
- firestore
- github
- 비동기
- .net
- await
- C#
- 유니티
- unity
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 |