[디자인패턴] 상속, 위임

Chloe Choi·2021년 4월 19일
0

디자인패턴

목록 보기
9/11

디자인패턴은 아니지만 이 시리즈가 가장 적합한 거 같아서 여기에 넣었습니다!

상속

Inheritance, 기존 클래스의 속성을 물려 받는 것

  • is-a 관계

위임

Delegation, 책임을 다른 객체에 전달하는 것

  • has-a 관계
  • re-exporting method
  • 상속의 대체방안이 될 수 있음
  • 다른 클래스의 instance를 가져 그 instance에 message를 forward
  • object 간 관계로 볼 수 있음

vs. 상속

  • run-time 유연성
    위임 당하는 객체를 런타임에 쉽게 바꿀 수 있음 👉 전략패턴에 사용
  • 정말 필요한 속성만 골라 사용할 수 있음
    상속으로 구현 시, 불필요한 속성(행위, 상태)과도 관계를 가짐 👉 다른 개발자가 상위 클래스의 다른 함수를 잘못사용할 수 있음 ❗️❗️

    실제 Java의 Stack이 잘못구현되어 있음
    ✔️ Vector를 상속받는 구조인데 Vector의 isEmpty() 메소드만 사용하는데 잘못된 사용으로 erase 등 다른 함수를 사용할 수 있는 위험이있음
    ✔️ 만약 위임으로 구현했다면 필요에 따라 다른 자료구조로 만들 수 있을텐데,,
    ✔️ Stack is-NOT-a Vector

구현

객체 간 관계를 association 으로 함

ref. https://www.geeksforgeeks.org/association-composition-aggregation-java/

profile
똑딱똑딱

0개의 댓글