final
키워드는 이름 그대로 끝! 이라는 뜻이다.
변수에 final
키워드가 붙으면 더는 값을 변경할 수 없다.
final
을 지역 변수에 설정할 경우 최초 한번만 할당할 수 있다. 이후에 값을 변경하려면 컴파일 오류가 발생한다.final
을 지역 변수 선언시 바로 초기화 한 경우 이미 값이 할당되었기 때문에 값을 할당할 수 없다.final
이 붙으면 메서드 내부에서 매개변수의 값을 변경할 수 없다. 따라서 메서드 호출 시점에 사용된 값이 끝까지 사용된다. // final 필드 - 필드 초기화
public class FieldInit {
static final int CONST_VALUE = 10;
final int value = 10;
}
static
변수에도 final
을 선언할 수 있다.
FieldInit
과 같이 final
필드를 초기화 하는 경우, 모든 인스턴스가 다음 오른쪽 그림과 같이 같은 값을 가진다.FieldInit
인스턴스의 모든 value
값은 10
이 된다.static
영역이다.FieldInit.MY_VALUE
는 static
영역에 존재한다. 그리고 final
키워드를 사용해서 초기화 값이 변하지 않는다.static
영역은 단 하나만 존재하는 영역이다. MY_VALUE
변수는 JVM 상에서 하나만 존재하므로 앞서 설명한 중복과 메모리 비효율 문제를 모두 해결할 수 있다.이런 이유로 필드에 final
+ 필드 초기화를 사용하는 경우 static
을 붙여서 사용하는 것이 효율적이다.
상수는 변하지 않고, 항상 일정한 값을 갖는 수를 말한다. 자바에서는 보통 단 하나만 존재하는 변하지 않는 고정된 값을 상수라 한다.
이런 이유로 상수는 static final
키워들 사용한다.