본문 바로가기

삽질

Java 상수 final의 초기화 방법

0. 개요

final이 붙으면, 한 번 초기화가 될 경우 그 값을 바꾸지 못하는 상수가 됩니다.

예전에는 선언과 동시에 초기화를 해야 했지만, 현재는 그러지 않아도 됩니다.

이 글에서는 상수를 어떻게 하면 초기화 할 수 있을지에 대해 알아보겠습니다.

 

1. 정적(static) 상수

1.1 선언과 동시에 초기화

일반적으로 정적 상수를 사용할 때에는, 선언과 동시에 초기화를 합니다.

public class Test {
    private static final int STATIC_VALUE = 5;
}

현재 상태에서 선언과 동시에 초기화를 하지 않으면 에러가 뜹니다.

1.2 정적 블럭

정적 블럭을 통해서라면 멤버 레벨에서 초기화하지 않아도 됩니다.

public class Test {
    private static final int STATIC_VALUE;

    static {
        STATIC_VALUE = 5;
    }
}

1.1과 1.2는 방법의 차이가 있지만,

프로그램 실행시 Static 영역에 할당되어, 종료까지 모든 객체가 공유합니다.

 

2. 클래스 필드 레벨 상수

1.1 선언과 동시에 초기화

정적 상수와 마찬가지로 선언과 동시에 초기화 하는 방법입니다.

public class Test {
    private final int VALUE = 5;
}

1.2 생성자 초기화

생성자느 객체가 만들어질 때 가장 먼저 동작하는 특별한 메서드입니다.

때문에, 생성자를 이용하면 상수를 초기화 해도 됩니다.

public class Test {
    private final int VALUE;

    Test(){
        VALUE = 5;
    }
}

 

3. 메소드 멤버 레벨 상수

3.1 선언과 동시에 초기화

메서드 내부에서 선언과 동시에 초기화를 하는 방법입니다.

public class Test {
    public void get(){
        final int VALUE = 5;
    }
}

3. 2 사용하기 전 초기화

메서드 내부에서 사용할 때에는, 상수를 사용하기 전에만 초기화 하시면 됩니다.

public class Test {
    public void get(){
        final int VALUE;

        int tmp = 10 + 5;
        VALUE = 5;
        tmp += VALUE;
    }
}