Skip to content

아이템 18. 상속보다는 컴포지션을 사용하라 #38

Answered by JoisFe
corock asked this question in 3. 과제
Discussion options

You must be logged in to vote

상속보다는 구성(컴포지션)을 활용 디자인 원칙 중 정말 유명한 원칙이라 집중해서 정리하신 글을 읽었습니다.
특히 변형된 HashSet을 구현하는데 상속을 이용한 방법과 그로 인한 문제점을 구성으로 해결하는 예제가 이해하는데 매우 좋았던 것 같습니다.

상속보다는 구성을 활용 한다는 것이 "A is a B" 보다 "A has a B"가 나을 수 있기 때문입니다. 한국말로 풀어보면 "A는 B이다" 보다는 "A에는 B가 있다"가 더 나을 수 있기 떄문입니다.

구성을 활용하는 방식이 디자인 패턴의 여러 패턴에서도 많이 쓰이기에 정말 중요하다고 알 고 있고 @corock 님께서 설명해주신 예시 뿐만 아니라 전략 패턴 (Strategy Pattern) 에서도 쓰여서 해당 예시를 참고하는 것도 좋은 것 같아 올립니다.

정말 유명한 예인데 추상 클래스 Duck과 추상메서드 quack()이 있을때 오리 종류마다 quack을 다르게 구현하고 싶은 상황이 있다고 가정합시다.

상속을 이용한다면 오리 종류마다 quack 메서드를 재정의 할 수 있으니 좋다고 판단하여 상속을 이용해 구현해보았습니다.

public abstract class Duck {
    abstract void quack();
}
public class JoisFeDuck extends Duck {

    @Override
    void quack() {
        System.o…

Replies: 2 comments 5 replies

Comment options

You must be logged in to vote
3 replies
@corock
Comment options

corock Jan 2, 2023
Maintainer Author

@JoisFe
Comment options

@YuDeokRin
Comment options

Comment options

You must be logged in to vote
2 replies
@YuDeokRin
Comment options

@corock
Comment options

corock Jan 2, 2023
Maintainer Author

Answer selected by Irisation23
# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
4장 클래스와 인터페이스 이펙티브 자바 4장 (클래스와 인터페이스)
3 participants