2.3.6 최종 인스턴스 변수
인스턴스 변수를 최종(final)으로 선언할 수 있다. 최종으로 선언한 변수는 생성자 실행이 끝나기 전에 초기화해야 한다. 초기화한 후에는 해당 변수를 수정할 수 없다. 예를 들어 Employee 클래스의 name 변수는 객체를 생성한 후에는 절대 변하지 않으므로(setName 메서드가 없다) final로 선언할 수 있다.
public class Employee {
private final String name;
...
}
Note ≣
변경 가능한 객체를 가리키는 참조에 사용하면 final 제어자는 그저 참조 자체가 절대로 변하지 않는다는 사실만 나타낸다. 따라서 객체의 내용을 변경하는 것은 완전히 합법적이다.
public class Person {
private final ArrayList<Person> friends = new ArrayList<>();
// 이 배열 리스트에 요소를 추가하는 것은 괜찮다.
...
}
메서드에서 friends가 참조하는 배열 리스트를 변경할 수 있지만, 다른 객체로는 절대 교체할 수 없다. 특히 이 참조를 null로 설정할 수 없다.