Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

자바(Java)에서 상수(Constant)와 final 변수의 차이점은 무엇일까?

자바에서 상수(Constant)란?

상수 변수는 값이 고정되어 있으며 프로그램 전체에서 단 하나의 복사본만 존재하는 변수를 의미합니다. 상수 변수를 선언하고 값을 할당하면 이후 프로그램 어디에서도 그 값을 다시 변경할 수 없습니다.

C 언어와 달리 자바는 상수를 직접적으로 지원하지 않습니다. 하지만 변수를 staticfinal로 함께 선언하면 상수처럼 사용할 수 있습니다.

  • 변수를 static으로 선언하면 컴파일 시점에 메모리에 로드되므로 프로그램 전체에서 단 하나의 복사본만 존재하게 됩니다.
  • 변수를 final로 선언하면 값을 다시 수정할 수 없습니다.

예제

class Data {
    static final int integerConstant = 20;
}
public class ConstantsExample {
    public static void main(String args[]) {
        System.out.println("value of integerConstant: "+Data.integerConstant);
    }
}

실행 결과

value of integerConstant: 20

자바에서 final 변수란?

변수를 final로 선언하면 그 값을 더 이상 변경할 수 없습니다. 만약 값을 변경하려고 시도하면 컴파일 타임 오류가 발생합니다.

예제

public class FinalExample {
    public static void main(String args[]) {
        final int num = 200;
        num = 2544;
    }
}

실행 결과

FinalExample.java:4: error: cannot assign a value to final variable num
    num = 2544;
   ^
1 error

final 변수와 상수의 핵심 차이

final 변수와 상수(static + final)의 가장 큰 차이는 다음과 같습니다. static 키워드 없이 final 변수만 선언하면 값은 수정할 수 없지만, 새로운 객체를 생성할 때마다 해당 변수의 별도 복사본이 만들어집니다. 반면 상수는 값이 변경 불가능할 뿐만 아니라 프로그램 전체에서 단 하나의 복사본만 유지됩니다.

다음 자바 프로그램을 통해 이를 확인해 보겠습니다.

예제

class Data {
    final int integerConstant = 20;
}
public class ConstantExample {
    public static void main(String args[]) {
        Data obj1 = new Data();
        System.out.println("value of integerConstant: "+obj1.integerConstant);
        Data obj2 = new Data();
        System.out.println("value of integerConstant: "+obj2.integerConstant);
    }
}

실행 결과

value of integerConstant: 20
value of integerConstant: 20

위 예제에서는 final 변수를 하나 만들고 서로 다른 두 객체를 통해 그 값을 출력했습니다. 두 경우 모두 출력되는 값은 20으로 동일하지만, 각각 다른 객체를 사용했기 때문에 실제 변수의 복사본을 참조하는 것입니다.

상수의 정의에 따르면 변수는 프로그램(클래스) 전체에서 단 하나의 복사본만 가져야 합니다.

따라서 정의에 맞는 진정한 상수를 만들려면 반드시 static과 final을 함께 사용하여 선언해야 합니다.