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의 사용을 좀 더 고려해볼 필요가 있다.
class A
{
public const double CONST_PI = 3.14f;
public readonly double READONLY_PI = 0.0f;
public A()
{
READONLY_PI = 3.14f; // readonly경우 생성자에서 값을 변경
}
}
Class Program
{
static void Main(string[] args)
{
A a = new A();
Console.WriteLine(A.CONST_PI); // const 변수는 클래스 이름으로 접근
Console.WriteLine(a.READONLY_PI); // readonly 변수는 객체 이름으로 접근
}
}
'개발언어 > C#' 카테고리의 다른 글
[C#] virtual 함수 의미 및 활용 (0) | 2023.05.17 |
---|---|
[C#] Const와 Readonly의 차이점 #2 (0) | 2023.05.17 |
[C#] 어떠한 경우에도 파일닫기 using, IDisposable (0) | 2023.05.17 |
[C#] 어떠한 경우에도 실행 using, IDisposable (0) | 2023.05.17 |
[C#] Linq 정리하기 (0) | 2023.05.17 |