루비로 배우는 객체지향 디자인
처음 구매 했을때는 주변 루비 개발자분들이 좋은책 이라고 해서 구매했지만 막상 읽지를 않고 책장에 꽃혀있던 책을 블로그 포스팅을 위해 꺼내서 읽었습니다.
작성은 각 장에서 깨달은 내용을 적을 예정이고 총 9장까지 있습니다.
책 제목은 루비지만 꼭 루비가 아니더라도 객체지향 디자인을 원하는 사람에게는 좋은 책이라는걸 느꼈습니다.
8. 조합을 이용해 객체 통합하기
객체지향에서의 조합은 독립적인 객체를 보다 크고 복합적인 것으로 통합하는것을 의미합니다. 이는 좀 더 큰 객체가 다른 작은 객체들을 가지고 있는 has-a 관계를 가진다고 이야기 할 수 있습니다.
예시에서는 상속으로 구현했던 클래스를 조합으로 구현하는 방식을 설명했습니다.
따라서 상속과 조합 각각의 이점에 대해서 정리해보려고 합니다.
“상속은 특수화이다.” - 클래스의 손길: 객체와 계약을 통해 재대로 프로그래밍 배우기
“상속은 이미 존재하는 클래스들에 새로운 기능을 추가할 때 가장 잘 어울린다. 기존 코드의 대부분을 계속 사용하면서 상대적으로 적은 양의 새로운 코드를 추가하는 상황에 어울린다,” - 디자인 패턴: 재사용성을 지닌 객체지향 소프트웨어의 핵심 요소
“주어진 행동이 자신의 부분들의 총합 이상일 때 조합을 사용하라” - 객체지향 분석과 디자인
- is-a 관계에서 상속 사용하기
- behaves-link-a 관계에는 오리 타입 사용하기
- has-a 관계에서 조합 사용하기
조합보다 어떤 것을 사용해야 할지에 대한 이야기를 더 많이 한것 같지만 조합 자체는 정말 객체 내부에 어떤 객체를 가지고 있는 형태를 설명하고 있어 크게 정리할 내용이 없었습니다. 그리고 무엇보다 중요한건 어떤 상황이 생겼을때 각각에 맞는 디자인을 잘 선택해 사용하는게 중요하기 때문에 이 부분을 좀 더 중점적으로 적었습니다.