본문 바로가기

C# 프로그래밍/문법 개념

[C#] 상수 선언과 읽기 전용 키워드 (Const & Read only)

반응형

const와 readonly는 무엇인가?

 단어에서 알 수 있듯이 const는 constant의 약자로 상수라는 뜻이다. 상수는 변하지 않는 값이며 프로그래머가 개발 도중에 생길 수 있는 실수로 인해 값이 변하는 것을 막기 위해 존재한다. readonly 역시 직역하자면 읽기만 가능 이라는 뜻인데 다른 말로 "write가 불가능"이라고 할 수 있겠다. 따라서 두 키워드 모두 값의 변경을 막고자 할 때 사용한다.


어떠한 차이가 있는가?

 const와 readonly는 메모리 할당 영역부터 다르다. const는 static영역에 메모리가 할당되기 때문에 프로그램 시작 전부터 이미 메모리가 할당이 되어있다. readonly는 일반 필드 영역에 할당된다. 이 같은 이유로 다음과 같은 차이점이 발생하게 된다.

 

 우선 const는 static영역에 할당 되므로 선언과 동시에 초기화해주어야 한다. 그 어떠한 값도 프로그램 실행 후 할당하려고 하면 이미 const값이 static영역에 값이 정해져 있는 후기 때문에 넣어줄 수 없다.


 반면 readonly는 생성자를 통하여 값을 대입할 수 있다. 따라서 선언과 동시에 초기화를 시켜주지 않아도 된다!

 

 readonly는 static이 아니기 떄문에 static키워드를 통해 static으로 만들어 줄 수 있다. 반면 const는 태생이 static이기 때문에 static으로 만들 수 없다.


 [주의할 점: static으로 만든 readonly는 static생성자를 통해서 초기화를 시켜주어야 한다.]

 

반응형