상속용 클래스를 설계하기란 결코 만만치 않다. 클래스 내부에서 스스로를 어떻게 사용하는지 모두 문서로 남겨야 하며, 일단 문서화한 것은 그 클래스가 쓰이는 한 반드시 지켜야 한다. 그러지 안흥면 내부 구현 방식을 믿고 활용하 던 하위 클래스를 오작동하게 만들 수 있다. 다른 이가 효율 좋은 하위 클래스 를 만들 수 있도록 일부 메서드를 protected로 제공해야 할 수도 있다. 그러니 클래스를 확장해야 할 명확한 이유가 없다면, 상속을 금지하는 편이 나을 것이 다. 상속을 금지 하려면 클래스를 final로 선언하거나 생성자 모두를 외부에서 접근할 수 없도록 만들면 된다.
-
상속용 클래스는 재정의할 수 있는 메서드들을 내부적으로 어떻게 이용하는지 문서로 남겨야 한다. (@implSpec : 자바 개발팀이 내부적으로 자바독의 커스텀태그 기능을 사용하는 규약)
-
클래스의 내부 동작 과정 중간에 끼어들 수 있는 훅을 잘 선별하여 protected메서드 형태로 공개해야 할 수도 있다.
-
상속용으로 설계한 클래스는 배포 전에 반드시 하위 클래스를 만들어 검증해야 한다.
-
상속용 클래스의 생성자는 직접적으로든 간접적으로든 재정의 가능 메서드를 호출해서는 안된다.
-
상속용으로 설계하지 않은 클래스는 상속을 금지한다.
참고 상속을 금지하는 방법
- final 클래스
- private 필드, private 생성자, 정적 팩토리(item01) 사용