정리가 필요한 카테고리(추후 정리)/C#,Unity

C#] 상수(Constant)

TwinParadox 2017. 1. 15. 12:59
728x90

상수 필드(constant field)


값을 결코 바꿀 수 없는 정적 필드

컴파일 시점에서 정적으로 평가되며, 컴파일러는 상수가 쓰이는 곳마다 그 값을 직접 삽입하며,

이는 C++의 매크로와 상당히 유사한 면을 띔.

타입으로는 내장 수치 타입들과, bool, char, string, 열거형을 사용 가능

상수 선언 시, const 키워드를 반드시 써줘야 하며, 초기치도 반드시 지정해야 함.


메서드에 국한된 지역 상수 사용을 가능하게 함.

지역 상수가 아닌 상수의 경우 다음과 같은 수정자들을 적용할 수 있음.

public internal private protected, new


사용할 수 있는 형식 면에서나 필드 초기화 방식에서나, static readonly 필드보다 훨씬 제한적임.

컴파일 시점에서 평가된다는 점 역시 static readonly 필드와 다름.


public static double Circumference (double radius)
{
	return 2 * System.Math.PI* radius;
}


public static double Circumference (double radius)
{
	return 6.2831853071795862 * radius;
}


PI와 같은 값은 상수로 두는 것이 합당함.

응용 프로그램마다 다른 값일 수 있는 필드는 static readonly로 만드는 것이 좋으며,

버전에 따라 달라질 수 있는 값을 다른 어셈블리들에 노출할 때에도 static readonly가 적합함.


public const decimal ProgramVersion = 3.0;


A 참조하는 B 어셈블러가 해당 상수를 사용하면, 3.0은 B를 컴파일할 때 B어셈블리 자체에 남음.

차후 이 상수를 수정하여 A를 다시 컴파일하여도, B는 여전히 이전 값을 사용하며,

B 자체를 컴파일하여야 비로소 변경된 값을 사용하게 됨.

const가 아닌 static readonly인 경우 이런 문제가 존재하지 않음.


728x90

'정리가 필요한 카테고리(추후 정리) > C#,Unity' 카테고리의 다른 글

C#] 부분 형식, 부분 메서드  (0) 2017.01.18
C#] nameof  (0) 2017.01.17
C#] 인덱서(Indexer)  (0) 2017.01.14
C#] 속성(Property  (0) 2017.01.13
C#] 인스턴스 생성자  (0) 2017.01.12