프로그래밍 언어/C#
컴파일 타임 상수와 런타임 상수: 어떤 것을 사용해야 할까?
가든_
2024. 2. 29. 00:49
프로그래밍에서 상수를 다룰 때, 컴파일 타임 상수와 런타임 상수의 선택은 중요하다.
각각의 특징과 사용 사례를 알고 적절히 활용하는 것이 필요하다.
컴파일 타임 상수
- const를 사용하여 정의됨
- 약간 더 빠르고, 성능이 매우 중요하고 값이 변하지 않는 경우에 적합
- 메서드 내부에서 선언 가능
- 컴파일 타임에 변수가 값으로 대체됨
- 내장 자료형에만 사용됨
- 정적 상수이므로 모든 인스턴스가 동일한 값을 갖음
class Character
{
private const int MoveSpeed = 5; // 캐릭터의 이동 속도를 상수로 정의
public void MoveForward()
{
// 캐릭터를 앞으로 이동시킴
// 이동 속도는 MoveSpeed를 사용하여 설정됨
}
}
런타임 상수
- readonly로 선언됨
- 유연성이 높음
- 메서드 내부에서 선언 불가
- 런타임에 값이 할당됨
- 어떤 타입과도 함께 사용 가능
- 클래스 내에서 다른 값을 가질 수 있음
class FileManager
{
private readonly string FilePath; // 파일 경로를 상수로 정의
public FileManager(string path)
{
FilePath = path; // 파일 경로를 런타임에 초기화
}
public void ReadFile()
{
// FilePath를 사용하여 파일을 읽어옴
}
}
어떤 것을 사용해야 할까?
- const는 성능이 빠르지만 유연성이 부족함
- readonly는 유연성이 높지만 성능은 조금 느릴 수 있음
- 대체적으로 readonly를 사용하는 것이 좋으며, 성능이 중요한 경우에는 반드시 성능을 측정하고 선택해야 함
상수값 정의 시 주의사항
- 컴파일할 때 사용되는 상수값은 반드시 const를 사용해야 함
- attribute(특성)의 매개변수, switch/case 문의 레이블, enum 정의 시 사용하는 상수 등은 컴파일 시에 사용되어야 하므로 const를 통해 초기화해야 함