suyeonme

[디자인패턴] 상속(Inheritance) vs 조합(Composition) 본문

프로그래밍👩🏻‍💻/디자인 패턴

[디자인패턴] 상속(Inheritance) vs 조합(Composition)

suyeonme 2022. 7. 17. 20:44

상속(Inheritance)


상속의 특징

  1. 코드를 재사용하여 중복을 줄일 수 있다. 따라서 유지보수가 쉬워진다.
  2. 상위 클래스와 하위 클래스가 is-a관계일 때 사용한다. (e.g. 동물 > 포유류 > 강아지)
public class Mammals extends Animal {

    protected void breath() { ... }

    protected void birth() { ... }
}

상속의 단점

  1. 상속은 단일 패키지에서 사용해야만 안전하다.
  2.  상위 클래스의 코드가 수정되면 하위 클래스의 코드도 수정되어야 하는 경우가 많다. (재정의 메소드)
  3. 상속은 캡슐화를 위반한다(하위 클래스가 상위 클래스에 구체적인 구현 내용을 의존하기 있기 때문)

 

조합(Composition)


상위 클래스를 상속하는 대신에 상위 클래스를 참조하는 private 필드를 만드는 것이다. 새로운 클래스의 메서드들은 기존 클래스에서 필요한 메서드를 호출하면 된다.  

조합의 특징

  1. 조합은 기존 클래스의 세부 구현과 상관 없기 때문에 기존 클래스가 수정이 되어도 영향을 미치지 않는다.
  2. 클래스가 has-a관계에 있을 때 사용한다. (e.g. 자동차 -- 엔진 -- 바퀴)
public class Car {
    private Engine engine;
    private Wheel wheel;
    
    public Car(Engine engine, Wheel wheel) {
      this.engine = engine;
      this.wheel = wheel;
    }
}

 

Comments