요약
public은 is-a이다.
실제로는 is-implemented-in-terms-of가 될 수도 있고 has-a가 될 수도 있다. 그 이유는 영역이 2가지 이기 때문.
소프트웨어의 응용영역(has-a), 구현 영역(is-implemented-in-terms-of)
상대적으로 is-implemented-in-terms-of 관계와 is-a 관계가 헷갈리기 쉽다.
has-a 는 사람,주소,전화번호 등 데이터로써 가치가 있는 개체 합성을 뜻한다.
is-implemented-in-terms-of 는 사람을 찾는 방법, 주소를 찾는 방법, 전화번호를 찾는 방법 등 무엇인가를 위한 알고리즘으로써의 가치가 있음을 뜻한다(객체 합성).
상속의 단점
상속을 사용해야 하는 경우
상속을 반드시 사용해야 한다면,
유사한 두 함수를 추출하여 동일한 형태로 만들고, 부모 클래스의 코드를 자식으로 옮기는 것이 아니라 자식 클래스의 코드를 부모로 옮기도록하자!
객체 합성을 사용하면 구현을 효과적으로 캡슐화 할 수 있다. 의존하는 객체를 교체하는 것이 비교적 쉽고, 설계가 유연해지기 때문!
상속은 클래스를 통해 강하게 결합되지만, 합성은 메세지를 통해 느슨하게 결합되기 때문!
잊지말자!