Effective Java #19 - 상속용 클래스 고려사항
업데이트:
클래스와 인터페이스 (4장)
#19 : 상속을 고려해 설계하고 문서화하라. 그러지 않았다면 상속을 금지하라
상속용 클래스를 설계하려면 고려해야 할 사항이 많기 때문에 문서화를 철저히 해야하고, 상속용 클래스가 아니라면 상속을 금지하도록 설계해야 한다.
요약
- 상속용 클래스를 설계하려면 아래와 같은 제약사항들이 따른다.
- 배포전에 하위 클래스를 만들어 검증해야 한다.
- 상속용 클래스의 생성자는 직접적, 간접적으로든 오버라이드 메서드를 호출해서는 안된다.
- 그렇기 떄문에 상속용으로 설계하지 않은 클래스는 상속을 금지해야 한다.
- 클래스를 final로 선언하거나 생성자 모두를 외부에서 접근할 수 없도록 만들면 된다.
핵심 정리
- 상속 관계에 있을 때 상위 클래스의 생성자가 하위 클래스 생성자보다 먼저 실행된다. 그렇기 때문에 상위 클래스의 생성자에서는 오버라이드 될 수 있는 메소드를 호출하면 안 된다.
- 객체의 확장은 가능하면 상속이 아닌 wrapper class 패턴을 활용해서 구현하자.
- 상속을 해야하는 경우에는 그에 맞춰 설계하고 문서화를 철저히 해야한다.
References
- Effective Java 3/E - Joshua Bloch
- JavaSquid Issue-19
댓글남기기