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

Java에서 모든 생성자에서 빈 final 변수를 명시적으로 초기화해야 하는 이유

초기화하지 않은 채 선언된 final 변수를 빈 final 변수(blank final variable)라고 합니다.

빈 final 변수와 컴파일 오류

일반적으로 인스턴스 변수는 생성자에서 초기화하며, 초기화를 생략하면 JVM이 기본값으로 자동 초기화해 줍니다. 하지만 빈 final 변수는 기본값으로 자동 초기화되지 않습니다. 따라서 생성자에서 초기화하지 않은 빈 final 변수를 사용하려고 하면 컴파일 타임 오류가 발생합니다.

오류 발생 예제

public class Student {
    public final String name;
    public void display() {
        System.out.println("Name of the Student: "+this.name);
    }
    public static void main(String args[]) {
        new Student().display();
    }
}

컴파일 오류 메시지

위 프로그램을 컴파일하면 다음과 같은 오류가 출력됩니다.

Student.java:3: error: variable name not initialized in the default constructor
    private final String name;
                         ^
1 error

따라서 final 변수는 한 번이라도 반드시 초기화해야 합니다. 특히 클래스에 여러 개의 생성자가 정의되어 있다면, 어떤 생성자로 객체가 생성되더라도 값이 할당될 수 있도록 모든 생성자에서 빈 final 변수를 초기화해 주어야 합니다.

올바른 구현 예제

아래 예제는 기본 생성자와 매개변수가 있는 생성자 두 곳 모두에서 final 변수를 초기화하는 방법을 보여줍니다.

public class Student {
    public final String name;

    // 기본 생성자
    public Student() {
        this.name = "Raju";
    }

    // 매개변수가 있는 생성자
    public Student(String name) {
        this.name = name;
    }

    public void display() {
        System.out.println("Name of the Student: "+this.name);
    }

    public static void main(String args[]) {
        new Student().display();
        new Student("Radha").display();
    }
}

실행 결과

Name of the Student: Raju
Name of the Student: Radha

이처럼 모든 생성자 경로에서 final 변수가 확실하게 초기화되면, 해당 변수는 불변(immutable) 값을 안전하게 유지할 수 있습니다.