상속과 합성은 객체지향 프로그래밍에서 가장 널리 사용되는 코드 재사용 기법을 이야기한다.
상속이 부모 클래스와 자식 클래스를 연결해서 부모 클래스의 코드를 재사용하지만, 합성은 전체를 표현하는 객체가 부분을 표현하는 객체를 포함해 부분 객체의 코드를 재사용한다.
상속관계는 is - a라고도 불리고, 합성 관계는 has-a 관계라고 부른다.
여러 가지 내용이 있지만, 이는 결국 하나를 이야기하고 있는 것 같았다.
객체의 합성이 상속보다 더 좋은 방법이다.
코드 재사용을 위한 상속 남용시 발생하는 세 가지는 다음과 같다.
포워딩 ( forwarding )
포워딩 메서드 ( forwarding method )
몽키 패치 ( Monkey Patch )
상속으로 인해 결합도가 높아지면 코드를 수정하는 데 필요한 작업의 양이 과도하게 늘어나는 경향이 있다.
작은 기능들을 조합하여 큰 기능들을 수행하는 객체를 만들어야하는 경우 다음과 같은 문제점이 발생한다.
합성을 사용하면 상속에서 발생하는 클래스 증가와 중복 코드 문제를 해결할 수 있다. 그러니 합성을 쓰도록 하자!!!
훅 메서드
그렇다면 믹스인과 상속은 비슷할까? NO!
상속의 진정한 목적은 자식 클래스를 부모 클래스와 동일한 개념적인 범주로 묶어 is-a 관계를 만들기 위한것이다.
믹스인은 말 그대로 코드를 다른 코드 안에 섞어 넣기 위한 방법이므로 이는 다르다.
믹스인은 추상 서브 클래스 ( abstract subclass )라고 부르기도 한다.
믹스인을 사용하게 되면 특정한 클래스에 대한 변경 또는 확장을 독립적으로 구현한 후 필요한 시점에 차례대로 추가할 수 있다.
해당 챕터에서는 이해를 돕기위한 코드 예제가 들어있었는데, 이때 믹스인 파트에는 스칼라를 활용해서 예시를 표현해주었다.
이전에 잠깐! 스칼라를 찍먹한 경험을 가지고 있어 해당 경험을 토대로 이해를 해보며 살펴보았는데 이를 통한 예제들을 학습해야겠다란 생각이 들었다..
[BOOK : 오브젝트 15장] 디자인 패턴과 프레임워크 (0) | 2022.12.18 |
---|---|
[BOOK : 오브젝트 14장] 일관성 있는 협력 (0) | 2022.12.10 |
[BOOK: 오브젝트 10장] 상속과 코드 재사용 (0) | 2022.11.18 |
[BOOK: 오브젝트 7장] 객체 분해 (0) | 2022.11.11 |
[BOOK: 오브젝트 6장] 메시지와 인터페이스 (0) | 2022.11.07 |