728x90
- 상속은 많은 문제가 발생할 수 있다.
- 패키지 경계를 넘어, 즉 다른 패키지의 구체 클래스를 속하는 일은 위험하다.
- 상속은 캡슐화를 깨뜨린다.
- 깨뜨린다보다 상속을 받은 자식 클래스가 상위 클래스의 private 멤버에 접근할 수 있기때문에 캡슐화의 의도와 달리 구현이 공개 될 수 있게 된다.
- 상위 클래스의 구현에따라 동작에 이상이 생길 수 있다.
- 상속은 캡슐화를 깨뜨린다.
- 이를 해결하기 위해 컴포지션(Composition)을 사용하라는 얘기이다.
- 컴포지션: 기존 클래스를 확장하는대신, 새로운 클래스를 만들고, private 필드로 기존 클래스의 인스턴스를 참조하게 한다.
- 기존 클래스의 대응하는 메서드를 호출해 그 결과를 반환한다.
- 이를통해 기존 클래스의 구현이 바뀌거나, 새로운 메서드가 생기더라도 아무런 영향이 받지 않는다.
- 컴포지션: 기존 클래스를 확장하는대신, 새로운 클래스를 만들고, private 필드로 기존 클래스의 인스턴스를 참조하게 한다.
- 119p 래퍼클래스가 콜백 프레임워크와는 어울리지 않는다는 점만 주의하면 된다
- 콜백 함수: 다른 함수의 인자로 전달된 함수를 받은 함수 내부에서 필요에따라 적절한 시점에 호출한다.
- 자기 자신의 참조를 넘기고, 콜백 때는 래퍼가 아닌 내부 객체를 호출하게 된다
- 래퍼 클래스로 감싼다 한들 실제 콜백히 호출하기전에는 자기 자신을 보내기때문에, 래퍼클래스는 넘어가지 않는다.
728x90
'공부 > 이펙티브자바' 카테고리의 다른 글
[이펙티브자바]item 20.추상 클래스보다는 인터페이스를 우선하라. (0) | 2023.02.03 |
---|---|
[이펙티브자바]item 19.상속을 고려해 설계하고 문서화하라.그러지 않았다면 상속을 금지하라. (0) | 2023.02.03 |
[이펙티브자바]item 17.변경 가능성을 최소화하라 (0) | 2023.01.31 |
[이펙티브자바]item 16.public 클래스에서는 public 필드가 아닌 접근자 메서드를 사용하라 (0) | 2023.01.31 |
[이펙티브자바]item 15. 클래스와 멤버의 접근 권한을 최소화하라 (0) | 2023.01.19 |
댓글