[C#] const와 readonly의 차이

728x90
반응형

 

C# 에서 const 와 readonly는 상수형 타입입니다. 보다 자세히 말씀드린다면,

const는 컴파일 타입의 상수이며, readonly는 런타임 상수입니다.

 


const

  • 컴파일 타입의 상수이다. (컴파일 시 const 변수의 값을 가져온다.)
  • 내장자료형 (정수형, 실수형, Enum, String)에 대해서만 사용 할 수 있다.
  • 변수 선언과 동시에 값을 할당 해야 한다.
  • 메모리 할당 위치는 Stack Memory 이다. 단, static 선언을 하면 Heap Memory에 저장 가능하다.

 


 

readonly

  • 런타임 상수이다. (exe 또는 dll을 사용할 때 변수의 값을 가져온다.)
  • 모든 자료형에 사용 할 수 있으며, 생성과 동시에 초기화 할 필요는 없다.
  • 단, 생성자 단계에서 단 1번 할당을 통해 초기화 할 수 있다. 
  • 메모리 할당 위치는 Heap Memory이다.

 


왜 const 보다 readonly가 더 좋은가?

const는 Stack Memory에 저장 되기 때문에 접근이 빠르다는 장점이 있지만, 

const는 컴파일 상수이기 때문에, const 변수 값이 바뀌는 경우 해당 프로젝트 뿐만 아니라 참조 받거나 영향을 받는 프로젝트 모두 재 컴파일을 해야 하는 단점이 있다.

 

반면, readonly는 생성시 선언하지 않아도, 생성자에서 초기화 하여 사용 할 수 있기 때문에 유연하며, 실제 사용하는 단계에서 변수의 값을 가져오는 장점이 존재한다.

 

 

상수값 변경시 재 컴파일을 하지 않고, 사용하는 생성자 단에서 변수에 값을 할당해서 사용 할 수 있기 때문에

const 보다는 readonly의 사용을 좀 더 고려해볼 필요가 있다.

 

 

 

728x90