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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
4장 클래스와 인터페이스 이펙티브 자바 4장 (클래스와 인터페이스)
3 participants