정리

상속용 클래스는 재정의할 수 있는 메서드들을 내부적으로 어떻게 이용하는지(자기사용) 문서로 남겨야한다.
재정의 가능이란 public protected 메서드중 final 이 아닌 모든 메서드를 뜻한다.

글래스의 내부 동작과정 중간에 끼어들수 있는 hook 을 잘 선별하여 proteced 메서드 형태로 공개해야 할 수도 있다.

상속용 클래스를 시험하는 방법은 직접 하위 클래스를 만들어보는 것이 유일하다.

상속용으로 설계한 클래스는 배포전에 반드시 하위 클래스를 검증해야 한다.

상속용 클래스의 생성자는 직접적으로든 간접적으로든 재정의 가능 메서드를 호출해서는 안된다.

정리

상속용 클래스를 설계하기란 결코 만만치 않다. 클래스 내부에서 스스로를 어떻게 사용하는지 모두 문서로 남겨야하며, 일단 문서화한 것은 그 클래스가 쓰이는 한 반드시 지켜야한다. 그렇지 않으면 그 내부 구현방식을 믿고 활용하던 하위 클래스를 오작동하게 만들 수 있다. 다른 이가 효율 좋은 하위 클래스를 만들 수 있도록 일부 메서드를 proteceted 로 제공할 수도 있다. 그러니 클래스를 확장해야 할 명확한 이유가 떠오르지 않으면 상속을 금지하는 편이 나을 것이다. 상속을 금지하려면 클래스를 final 로 선언하거나 생성자를 모두 외부에서 접근할 수 없도록 만들면 된다.