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

자바(Java)에서 상수를 정의하려면 final 키워드만으로 충분할까?

상수(constant)란 값이 고정되어 있고 프로그램 전체에서 단 하나의 복사본만 존재하는 변수를 말합니다. 상수 변수를 선언하고 값을 할당한 후에는 프로그램이 실행되는 동안 그 값을 다시 변경할 수 없습니다.

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

static과 final의 역할

static – 변수를 static으로 선언하면 컴파일 시점에 메모리에 로드되며, 프로그램 전체에서 단 하나의 복사본만 존재하게 됩니다.

final – 변수를 final로 선언하면 한 번 값을 할당한 이후에는 더 이상 그 값을 수정할 수 없습니다.

따라서 인스턴스 변수를 static과 final로 함께 선언하면 자바에서도 정의에 맞는 상수를 만들 수 있습니다.

예제 코드

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

실행 결과

INTEGER_CONSTANT 값: 20

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("integerConstant 값: " + obj1.integerConstant);
        Data obj2 = new Data();
        System.out.println("integerConstant 값: " + obj2.integerConstant);
    }
}

실행 결과

integerConstant 값: 20
integerConstant 값: 20

위 예제에서는 final 변수를 선언한 뒤 두 개의 서로 다른 객체를 통해 값을 출력했습니다. 두 경우 모두 출력된 값은 같지만, 각기 다른 객체를 사용했기 때문에 실제 변수의 복사본을 참조하는 셈입니다.

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

따라서 정의에 부합하는 진정한 의미의 상수를 만들려면 반드시 staticfinal을 함께 사용해야 합니다.