자바 final 변수란?
자바에서 final 키워드가 붙은 변수는 단 한 번만 명시적으로 초기화할 수 있습니다. 최초 초기화 이후에는 값을 다시 할당하는 것이 불가능합니다.
final로 선언된 참조(reference) 변수 역시 다른 객체를 가리키도록 재할당할 수 없습니다. 다만 여기서 중요한 점이 있습니다. 고정되는 것은 '참조' 자체이지, 객체 내부의 데이터까지 불변인 것은 아니라는 점입니다. 즉, 객체의 상태(내부 필드 값)는 얼마든지 변경할 수 있으며, 변경할 수 없는 것은 오직 참조뿐입니다.
final과 static을 조합한 상수 선언
변수에 final 제어자(modifier)를 적용할 때는 일반적으로 static 키워드와 함께 사용하여 클래스 변수 형태의 상수를 만드는 경우가 많습니다. 이렇게 하면 해당 상수가 객체마다 따로 존재하지 않고 클래스 차원에서 하나만 유지되므로, 프로그램 전체에서 공유하는 고정 값으로 활용하기에 적합합니다.
예제 코드
public class Test {
final int value = 10;
// 아래는 상수 선언의 예입니다.
public static final int BOXWIDTH = 6;
static final String TITLE = "Manager";
public void changeValue() {
value = 12; // 컴파일 오류 발생
}
}위 예제에서 인스턴스 변수 value는 final로 선언되어 생성 시점에 10으로 초기화되었습니다. 따라서 changeValue() 메서드 안에서 이 값을 12로 변경하려고 하면 컴파일 오류가 발생합니다.
반면 BOXWIDTH와 TITLE처럼 static과 final을 함께 사용하면 클래스 레벨의 상수가 되며, 관례상 상수 이름은 모두 대문자로 작성하고 단어 사이는 밑줄(_)로 구분합니다.