본문 바로가기
OOP/<오브젝트>, 조영호

11장 합성과 유연한 설계

by 민휘 2024. 1. 30.

11장 읽고 나눈 이야기

  • 믹스인.. 굉장히 독특하다! 구체적인 코드 조각을 섞음. 컴파일에 어떤 조각에 섞을지 결정하는데, 그 호출 시점은 동적으로 결정된다는 점이 흥미로움. 근데 이거 과연 좋을까? 그냥 합성하는게 좋지 않을까?
  • 합성보다 유지보수 측면에서 믹스인이 더 좋을 것 같다는 생각. 명시적인 의존성이 클래스 이름에 드러나니까 컴파일 시점에 알 수 있을 듯. 근데 클래스가 늘어나는거 보면 합성이 좀 더 유리할 수도??

11p347

코드 재사용은 상속보다 합성이 낫다. 상속은 부모 코드 전체를 재사용하지만, 합성은 부모의 퍼블릭 인터페이스를 재사용한다. 합성을 사용하면 클래스의 정적 관계 대신 객체 사이의 동적 관계를 사용할 수 있다. 변경 내용이 합성된 클래스에만 전파되므로 안정적이고, 필요한 코드만 추가해도 될 정도로 유연하게 대처할 수 있다.

 

11p351

합성 사용 시 합성한 클래스와 원래 클래스의 퍼블릭 인터페이스가 동일하다면, 인터페이스의 기본 구현만 가진 베이스 클래스를 상속해 원하는 메소드만 오버라이드할 수 있다.

 

11p353

클래스 폭발! 상속은 관계를 컴파일타임에 결정하므로 객체의 관계를 유연하게 설정할 수 없다. 특히 작은 기능을 조합해 큰 기능을 만드는 경우 클래스의 수와 중복 코드가 과하게 많아진다.

 

11p377

합성을 객체를 사용하고 조합하는 방식이 더 유연해진다. 데코레이터 패턴을 구현. 설계가 더 복잡하지만 한번 익숙해지면 예측 가능하고 일관적. 하나의 클래스만 추가해도 런타임에 필요한 정책을 조합할 수 있다. 요구사항 변경 시 하나의 클래스만 수정해도 된다.

 

11p381

독립적인 시점에 트레이트(부가기능)과 클래스를 작성한다. 믹스인을 결정하는 시점에(컴파일) 이들의 관계가 결정된다. 트레이트를 어떤 클래스에 섞느냐에 따라 실행되는 시점이 동적으로 달라진다. 클래스의 수는 많아지지만 중복코드는 늘어나지 않는다.