C#

C# const 보다는 readonly

sheepone 2021. 6. 15. 11:54
반응형

1. const (컴파일 타임 상수)

  • 컴파일 타임에 변수가 값으로 대체. 메서드 내부에서도 선언 가능
public void Coin() { 
  const int ibitcoin = 40207; 
}
  • 컴파일 타임에 변수가 값으로 대체 되기 때문에 내장된 숫자형, enum, 문자열, null과 같은 내장 자료형만 사용 가능.
//CS0283 'DateTime' 형식은 const로 선언할 수 없습니다.
private const DateTime bitcoin = new DateTime(2021, 0, 0, 0, 0, 0);
  • 할당 이후 변경 불가
//CS0131 할당식의 왼쪽은 변수, 속성 또는 인덱서여야 합니다.
const int ibitcoin = 40207;
public Form1()
{
  ibitcoin = 80000 ; 
}
  • 선언시 값 할당 필요 (초기화 필요)
const int ibitcoin = 40207;

 


2. readonly (런타임 상수)

  • 컴파일 타임에 값으로 대체되는 것이 아닌, 상수에 대한 참조로 컴파일되어 메서드 내에서는 선언 불가능.
//CS0106 이 항목의 'readonly' 한정자가 유효하지 않습니다.
//CS0131 할당식의 왼쪽은 변수, 속성 또는 인덱서여야 합니다.
public void Coin() { 
  readonly int ibitcoin = 40207; 
}
  • 꼭 생성과 동시에 초기화하지 않아도 되며, 생성자에서 최초 1번 초기화 가능. 그 이후에는 수정 불가능.
readonly int ibitcoin = 40207;
public Form1()
{
  ibitcoin = 80000 ; 
}
  • 어떤 타입과도 사용될 수 있다.

 


3. 런타임 상수와 컴파일 상수 비교

const 장점 성능이 빠르다는 것인데, 이를 통해 얻을 수 있는 성능 개선 효과가 크지 않아 아래 상황을 제외한다면 readonly를 사용하는 것이 좋습니다.

 

const를 사용해야 할때

  • 성능이 매우 중요하고 상수의 값이 절대로 바뀌지 않는 경우에 제한적으로 사용.
  • 재컴파일 전까지 기존 값을 유지하고 싶은 경우 
  • 선택적 매개 변수에 대한 기본값
  • 특성의 매개 변수
  • switch/case문의 레이블
  • enum 정의에 사용되는 상수
반응형