지역 상수

지역 상수 (Local Constants)

지역 상수는 지역 변수와 매우 유사하지만 차이점이 있습니다. 상수는 초기화된 뒤 값을 수정할 수 없습니다.

지역 변수와 마찬가지로 상수는 코드 블록 안에서 선언해야 합니다.

상수의 핵심 특징 두 가지는 다음과 같습니다.

  1. 선언할 때 반드시 초기값을 할당해야 함;
  2. 선언이 완료되면 값을 변경할 수 없음.

상수 기본 문법

const 자료형 상수이름 = 초기값;

// const: 키워드로, 자료형 바로 앞에 적어야 함
// = 초기값: 생략 불가, 필수로 작성
Code language: JavaScript (javascript)

문법 규칙 설명

일반 필드나 변수 선언과 비교했을 때 두 가지 차이점이 존재합니다.

  1. 자료형 앞에 const 키워드를 추가;
  2. 초기값을 반드시 제공해야 하며, 이 값은 컴파일 타임에 확정 가능해야 합니다:
    • 주로 기본 타입 리터럴, 기본 타입으로 구성된 표현식 사용;
    • 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)

상수 PIShowArea 메서드 내부에서만 사용 가능하며 메서드 실행이 종료되면 제거됩니다.


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)
PI 상수의 유효 범위(붉은 영역). 변수와 마찬가지로 상위 코드 블록 {}에 제한되며 PI의 상위 블록은 메서드 본체의 중괄호입니다.

지역 상수

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다