안녕하세요,
모스크바에서 개발과 담을 쌓고 살고 있는 개발자 윤진입니다.
C#에는 readonly라는 직설적인 이름의 키워드가 있습니다.
변수를 상수로 만들어버려, 변수값을 바꿀 수 없게 만드는 const와 유사해보이기도 하는데요.
readonly는 const와는 다르게 compile 시점에 값을 확정하지 않습니다.
반면, const는 소스코드에 명시된 변수값을 compile 시점에 확정하지요.
readonly는 프로그램이 메모리에 올라가는 runtime 시점에 이르러서야 값을 확정할 수 있습니다.
다음 두 경우에만 변수를 초기화할 수 있고 이후에는 갱신할 수 없습니다.
1) 변수를 선언하는 경우
2) 생성자 안에서 변수값을 바꾸는 경우
기기가 부팅하면서부터 함께 초기화되는 풀 스크린 UI 앱의 경우,
디스플레이의 해상도에 따라 화면구성요소의 크기가 달라질 수 있습니다.
앱은 런타임 중 최초 한 번에 한해 해상도를 확정짓고, 해상도에 맞게 구성물의 크기를 설정해둡니다.
이렇게 확정된 값은 프로세스가 종료되기 전까지 계속 사용할 수 있습니다.
물론, 위의 간단한 예시는,
기기가 한 번 부팅된 이후에는 해상도가 변하지 않는다는 것을 전제로 하고 있습니다.
환경설정에서 언제든 해상도를 바꿀 수 있는 디바이스에서는,
위와 같은 경우에 readonly 변수는 사용해서는 안됩니다. :(
플랫폼은 다양한 기기에 올라갈 수 있기 때문에,
여러 디바이스에서 유연하게 동작하도록 준비해야합니다.
기기마다 달라지는 요소(ex. 해상도)는 부팅 중에 메모리 영역에 데이터 조각으로 저장되고,
프로세스에서는 해당 데이터를 가지고 와서 readonly 변수에 저장해두고 두고두고 참조할 수 있습니다.
readonly는 (정의에 제한이 있지만) 일반 변수처럼 런타임 중에 값을 설정할 수 있기 때문에,
compile 중에 처리되는 const와 같은 성능 상의 이점은 없습니다.
그렇기 때문에 const를 사용할 수 있는 곳이라면 const를 사용하는 것이 조금 더 성능에 기여할 수 있습니다.
오늘은 이것으로 마치겠습니다.
'IT' 카테고리의 다른 글
[C#] using과 Dispose()로 리소스 정리하기 (0) | 2017.02.13 |
---|---|
[C#] 필드 사용가능? - interface, abstract class, partial class, virtual method (30) | 2017.02.12 |
[C#] 속성에 대한 간단한 테스트 (0) | 2017.02.09 |
[C#] 늘 헛갈리 Modal vs Modeless (0) | 2017.02.07 |
[C#] 소수점이 있는 숫자는 float일까 double일까. (30) | 2017.02.04 |
[C#] 왜 partial class를 사용하는걸까요? (34) | 2017.02.01 |
[C#] char[]를 string으로 변환하기 (30) | 2017.01.31 |
[C#] bool.Parser vs Convert.ToBoolean() (0) | 2017.01.30 |
[C#] Unicode에서 한글 초성/중성/종성에 대한 짧은 고찰 (0) | 2017.01.29 |
[C#] UTF-16의 캐릭터 크기에 대한 간단한 탐구 (0) | 2017.01.28 |