프로그래밍 언어/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를 통해 초기화해야 함