Java에서 final 변수란?
변수를 final로 선언하면 한 번 초기화된 이후에는 그 값을 더 이상 수정할 수 없습니다. 또한 일반 인스턴스 변수와 달리 final 변수는 기본값(default value)으로 자동 초기화되지 않습니다.
따라서 final 변수는 선언과 동시에 반드시 초기화해야 하며, 그렇지 않으면 컴파일 타임 오류가 발생합니다.
초기화하지 않은 경우의 예제
public class FinalExample {
final int j;
public static void main(String args[]){
FinalExample obj = new FinalExample();
System.out.println(obj.j);
}
}컴파일 타임 오류
FinalExample.java:2: error: variable j might not have been initialized final int j; ^ 1 error
final 변수를 초기화하는 4가지 방법
Java에서 final 변수는 다음 네 가지 방법으로 초기화할 수 있습니다.
1. 선언과 동시에 초기화
가장 기본적인 방법으로, 변수를 선언하는 즉시 값을 할당합니다.
public class FinalExample {
final int j = 100;
public static void main(String args[]){
FinalExample obj = new FinalExample();
System.out.println(obj.j);
}
}출력 결과
100
2. 메서드를 활용한 초기화
선언 시점에 메서드를 호출하여 반환값으로 초기화할 수도 있습니다.
import java.util.Scanner;
public class FinalExample {
final int num = getNum();
public static final int getNum() {
System.out.println("Enter the num value");
return new Scanner(System.in).nextInt();
}
public static void main(String args[]){
FinalExample obj = new FinalExample();
System.out.println(obj.num);
}
}출력 결과
Enter the num value 20 20
3. 생성자를 활용한 초기화
객체마다 다른 값을 가지도록 하려면 생성자에서 final 변수를 초기화하는 것이 좋습니다.
public class FinalExample {
final int num;
public FinalExample(int num) {
this.num = num;
}
public static void main(String args[]){
FinalExample obj = new FinalExample(20);
System.out.println(obj.num);
}
}출력 결과
20
4. 인스턴스 초기화 블록을 활용한 초기화
인스턴스 초기화 블록(instance initializer block)을 사용하면 모든 생성자 실행 전에 공통적으로 초기화 작업을 수행할 수 있습니다.
public class FinalExample {
final int num; {
num = 500;
}
public static void main(String args[]){
FinalExample obj = new FinalExample();
System.out.println(obj.num);
}
}출력 결과
500
정리
메서드를 활용한 초기화를 제외한 나머지 세 가지 방식(선언 시 초기화, 생성자, 인스턴스 초기화 블록)은 해당 클래스를 인스턴스화하는 순간 곧바로 값이 할당됩니다. 상황에 맞는 적절한 초기화 방법을 선택하면 코드의 안정성과 가독성을 모두 높일 수 있습니다.