본문 바로가기

IT

[C#] readonly 변수를 사용하는 이유는?


안녕하세요,

모스크바에서 개발과 담을 쌓고 살고 있는 개발자 윤진입니다.


C#에는 readonly라는 직설적인 이름의 키워드가 있습니다.

변수를 상수로 만들어버려, 변수값을 바꿀 수 없게 만드는 const와 유사해보이기도 하는데요.


readonly는 const와는 다르게 compile 시점에 값을 확정하지 않습니다.

반면, const는 소스코드에 명시된 변수값을 compile 시점에 확정하지요.


readonly는 프로그램이 메모리에 올라가는 runtime 시점에 이르러서야 값을 확정할 수 있습니다.

다음 두 경우에만 변수를 초기화할 수 있고 이후에는 갱신할 수 없습니다.


1) 변수를 선언하는 경우

2) 생성자 안에서 변수값을 바꾸는 경우


기기가 부팅하면서부터 함께 초기화되는 풀 스크린 UI 의 경우,

디스플레이의 해상도에 따라 화면구성요소의 크기가 달라질 수 있습니다.

앱은 런타임 중 최초 한 번에 한해 해상도를 확정짓고, 해상도에 맞게 구성물의 크기를 설정해둡니다.

이렇게 확정된 값은 프로세스가 종료되기 전까지 계속 사용할 수 있습니다.


물론, 위의 간단한 예시는,

기기가 한 번 부팅된 이후에는 해상도가 변하지 않는다는 것을 전제로 하고 있습니다.

환경설정에서 언제든 해상도를 바꿀 수 있는 디바이스에서는,

위와 같은 경우에 readonly 변수는 사용해서는 안됩니다. :(


플랫폼은 다양한 기기에 올라갈 수 있기 때문에,

여러 디바이스에서 유연하게 동작하도록 준비해야합니다.

기기마다 달라지는 요소(ex. 해상도)는 부팅 중에 메모리 영역에 데이터 조각으로 저장되고,

프로세스에서는 해당 데이터를 가지고 와서 readonly 변수에 저장해두고 두고두고 참조할 수 있습니다.


readonly는 (정의에 제한이 있지만) 일반 변수처럼 런타임 중에 값을 설정할 수 있기 때문에,

compile 중에 처리되는 const와 같은 성능 상의 이점은 없습니다.

그렇기 때문에 const를 사용할 수 있는 곳이라면 const를 사용하는 것이 조금 더 성능에 기여할 수 있습니다.


오늘은 이것으로 마치겠습니다.