IT자료실/기술서적

오브젝트 - 기술서적 스터디 11단원-합성과 유연한 설계

Ramda 2023. 11. 2. 09:57

 

상속과 합성

상속과 합성은 코드 재사용이라는 동일한 목적을 가진다는 점을 제외하면 구현 방법부터 변경을 다루는 방식까지 모든 면에서 차이를 보인다. 상속은 is-a 관계라고 부르고, 합성관계는 has-a 관계라고 부른다.

재사용의 대상이 다른 상속과 합성

  • 상속 : 부모 클래스 안에 구현된 코드 자체를 재사용 (화이트박스 재사용)
  • 합성 : 포함되는 객체의 퍼블릭 인터페이스를 재사용 (블랙박스 재사용)

상속을 남용했을 때 직면할 수 있는 문제점

  • 불필요한 인터페이스 상속 문제
  • 메서드 오버라이딩의 오작용 문제
  • 부모 클래스와 자식 클래스의 동시 수정 문제

몽키패치

  • 현재 실행 중인 환경에만 영향을 미치도록 지역적으로 코드를 수정하거나 확장하는 것을 가리킨다.
  • 자바에서는 바이트코드를 직접 변환하거나 AOP를 이용하여 몽키패치를 구현한다.

객체 합성이 클래스 상속보다 더 좋은 방법

  • 합성은 객체의 인터페이스를 재사용한다.
  • 합성이 상속봐 같은 문제를 초래하지 않는 이유는 클래스의 구체적인 구현이 아니라 객체의 추상적인 인터페이스에 의존하기 때문이다.

믹스인

  • 객체를 생성할 때 코드 일부를 클래스. 안에 섞어 넣어 재사용하는 기법
  • 합성처럼 유연하면서 상속처럼 쉽게 코드를 재사용할 수 있는 방법
  • 추상 서브클래스 라고 부르기도 한다.