지역 상수 (Local Constants)
지역 상수는 지역 변수와 매우 유사하지만 차이점이 있습니다. 상수는 초기화된 뒤 값을 수정할 수 없습니다.
지역 변수와 마찬가지로 상수는 코드 블록 안에서 선언해야 합니다.
상수의 핵심 특징 두 가지는 다음과 같습니다.
- 선언할 때 반드시 초기값을 할당해야 함;
- 선언이 완료되면 값을 변경할 수 없음.
상수 기본 문법
const 자료형 상수이름 = 초기값;
// const: 키워드로, 자료형 바로 앞에 적어야 함
// = 초기값: 생략 불가, 필수로 작성
Code language: JavaScript (javascript)
문법 규칙 설명
일반 필드나 변수 선언과 비교했을 때 두 가지 차이점이 존재합니다.
- 자료형 앞에
const키워드를 추가; - 초기값을 반드시 제공해야 하며, 이 값은 컴파일 타임에 확정 가능해야 합니다:
- 주로 기본 타입 리터럴, 기본 타입으로 구성된 표현식 사용;
null할당은 가능;- 객체 인스턴스 참조는 할당할 수 없음 (객체 참조는 런타임에 결정되므로 컴파일 타임 상수 조건에 맞지 않음).
class Program
{
static void Main()
{
int a = 10; // 변수입니다
const int b = 20; // 상수로, 변수와 형태가 비슷함
// 앞에 const 키워드가 붙으면 상수로 인식
a = 100; // 변수는 값 변경 가능
a = 200; // 여러 번 수정해도 상관없음
// 오류
b = 300; // 상수는 값을 바꿀 수 없어 컴파일러가 오류를 표시
// 상수를 사용하면 코드 가독성과 유지보수성이 좋아집니다
int c; // 변수 선언
c = 12; // 변수는 선언과 할당을 분리 가능
// 상수는 선언과 초기화를 따로 쓸 수 없음
// 오류
const double d; // 선언만
d = 3.14; // 변수에선 허용되지만 상수는 불가
}
}Code language: C# (cs)

위 두 가지 오류 원인은 첫 번째는 상수 값을 수정하려 한 것이고, 두 번째는 상수 선언과 초기화를 분리한 것입니다. 상수는 선언과 초기값 할당을 동시에 진행해야 합니다.
class 객체를 상수로 사용할 수 있을까요?
phone 상수에 할당하는 표현식은 컴파일 타임 상수여야 합니다.
new Phone()는 프로그램 실행 중 힙 메모리를 할당하고 객체를 생성하므로 런타임 값입니다.
C#에서는 런타임 객체 참조를 const 지역 상수에 할당하는 것을 금지하며 CS0133 오류가 발생합니다.
class Program
{
static void Main()
{
const Phone phone = new Phone();
}
}
class Phone
{
}Code language: C# (cs)

키워드 추가 설명
const는 수정자가 아니라 선언 구문의 핵심 구성 요소로, 자료형 바로 앞에 작성해야 합니다.
앞서 언급한 private, public, protected 등이 수정자에 해당합니다.
범위 규칙 및 예시
지역 상수의 범위 규칙은 지역 변수와 완전히 동일합니다. 메서드나 코드 블록 내에서 선언하면 블록 실행이 끝나는 순간 상수가 소멸되고 범위를 벗어나게 됩니다.
void ShowArea()
{
const double PI = 3.1416; // 지역 상수 PI 선언
for (int radius = 1; radius <= 5; radius++) // 반지름 1~5 원의 넓이 순서대로 출력
{
double area = radius * radius * PI; // 상수 PI 값 참조
Console.WriteLine($"반지름: {radius}, 넓이: {area}");
}
}
Code language: C# (cs)
상수 PI는 ShowArea 메서드 내부에서만 사용 가능하며 메서드 실행이 종료되면 제거됩니다.
class Program
{
static void Main()
{
ShowArea();
}
static void ShowArea()
{
const double PI = 3.1416;
for (int radius = 1; radius <= 5; radius++)
{
double area = radius * radius * PI;
Console.WriteLine($"Radius: {radius}, Area: {area}");
}
}
}
Code language: C# (cs)

지역 상수
Previous: 중첩 코드 블록과 범위
Next: 프로그램 제어 흐름