-
아이템18. 상속보다는 컴포지션을 사용하라Java/이펙티브 자바 2023. 8. 23. 12:27
핵심 정리
- 패키지 경계를 넘어 다른 패키지의 구체 클래스를 상속하는 일은 위험하다.
ㆍ상위 클래스에서 제공하는 메서드 구현이 바뀐다면...
ㆍ상위 클래스에서 새로운 메서드가 생긴다면...
- 컴포지션 (Composition)
ㆍ새로운 클래스를 만들고 private 필드로 기존 클래스의 인스턴스를 참조.
ㆍ새 클래스의 인스턴스 메서드들은 기존 클래스에 대응하는 메서드를 호출해 그 결과를 반환한다.
ㆍ기존 클래스의 구현이 바뀌거나, 새로운 메서드가 생기더라도 아무런 영향을 받지 않는다.
완벽 공략 요약
- p119, 데코레이터 패턴
- p119, 컴포지션과 전달 조합은 넓은 의미로 위임(delegation)이라고 부른다.
- p119, 콜백 프레임워크와 셀프 문제
완벽 공략 - 데코레이터 패턴
기존 코드를 변경하지 않고 부가 기능을 추가하는 패턴
- 상속이 아닌 위임을 사용해서 보다 유연하게(런타임에) 부가 기능을 추가하는 것도 가능하다.
완벽 공략 - 콜백 프레임워크와 셀프 문제
콜백 프레임워크와 래퍼를 같이 사용했을 때 발생할 수 있는 문제
- 콜백 함수 : 다른 함수(A)의 인자로 전달된 함수(B)로, 해당 함수(A) 내부에서 필요한 시점에 호출 될 수 있는 함수(B)를 말한다.
- 래퍼로 감싸고 있는 내부 객체가 어떤 클래스(A)의 콜백으로(B) 사용되는 경우에 this를 전달한다면, 해당 클래스(A)는 래퍼가 아닌 내부 객체를 호출한다. (SELF 문제)
'Java > 이펙티브 자바' 카테고리의 다른 글
아이템20. 추상 클래스보다 인터페이스를 우선하라. (0) 2023.08.31 아이템19. 상속을 고려해 설계하고 문서화하라. 그러지 않았다면 상속을 금지하라. (0) 2023.08.30 아이템17. 변경 가능성을 최소화 하라. (0) 2023.08.15 아이템16. public 클래스에서는 public 필드가 아닌 접근 메서드를 사용하라. (0) 2023.08.13 아이템15. 클래스와 멤버의 접근 권한을 최소화하라 (0) 2023.06.27