readonly vs. const
|
readonly |
const |
값 정의 |
런타임 |
컴파일 타임 |
메모리 할당 위치 |
Heap |
Stack(static 키워드로 Heap에 저장 가능) |
접근 속도 |
느림 |
빠름 |
초기회 |
생성자 단계에서 할당 |
변수 선언과 동시에 값 할당 |
자료형 |
모든 자료형 |
내장 자료형 |
정적 필드 |
static 키워드 사용 가능 |
선언과 동시에 정적필드에 자동 할당 |
readonly를 쓰는 이유
- const는 컴파일 상수
- 변수 값이 바뀌는 경우 참조 받거나 영향을 받는 프로젝트 모두 다시 컴파일
- readonly는 생성 시 선언하지 않아도 생성자에서 초기화 하여 사용
- 실제 사용하는 단계에서 변수의 값을 가져올 수 있음
- 상수값 변경 시 재컴파일을 하지 않음
- 사용하는 생성자 단에서 변수에 값을 할당해서 사용 할 수 있음
사용 예시
// case 1:
class TEST
{
public readonly string test = "start";
// constructor 안에서 초기화 가능
public TEST()
{
test = "abc";
}
public TEST(string s1)
{
test = s1;
}
}
// case 2:
// readonly는 지역 변수로 사용 불가
static void Main(string [] args)
{
const int abc = 3; // ok
readonly int def = 6; // error
}
출처