더북(TheBook)

자바 API에 있는 final 메서드의 좋은 예는 4.4.1 Class 클래스에서 살펴볼 Object 클래스의 getClass 메서드다. 서브클래스 객체가 자신이 속한 클래스를 속일 수 있게 하는 것은 좋지 않으므로 이 메서드는 절대 변경될 수 없게 만들어 놓았다.

일부 프로그래머는 final 키워드를 사용하면 효율성이 좋다고 생각한다. 자바 초창기에는 그러했을지 몰라도 지금은 아니다. 최신 가상 머신은 앞 코드의 getName 메서드처럼 간단한 메서드라면 final로 선언하지 않아도 추론적으로 인라인(inline) 처리한다. 드물게 이런 메서드를 오버라이드하는 서브클래스를 로드하는 상황에서는 인라인 처리를 하지 않는다.

가능하면 클래스의 메서드를 모두 final로 선언하고, 오버라이드가 필요한 메서드만 제외해야 한다고 생각하는 프로그래머도 있다. 다른 한편에서는 이렇게 하면 로깅이나 디버깅 용도처럼 무해한 오버라이딩조차 막아 버리므로 지나치게 가혹하다고 생각하기도 한다.

가끔은 자신이 만든 클래스의 서브클래스를 만들지 못하게 하고 싶을 수도 있다. 이렇게 하려면 클래스를 정의할 때 final 제어자를 사용해야 한다. 다음은 Executive 클래스의 서브클래스를 작성하지 못하게 만드는 방법이다.

public final class Executive extends Manager {

    ...

}


자바 API에는 String, LocalTime, URL 같은 final 클래스의 좋은 예가 많다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.