의존성은 설계를 어렵게 만든다. 불필요한 의존성을 제거하고 캡슐화를 통해 객체사이의 결합도를 낮춘다. 객체의 자율성을 높이고 응집도 높은 객체들이 협럭하는 것이 훌륭한 객체지향이다.
단순히 출력을 위한 메소드가 아니라면 get() 메서드를 의식적으로 사용하지 말아보자. get() 메서드는 의존성을 높이고 책임을 넘기게 된다. 객체 스스로가 수행 할 책임이 생기게 되고 의존성이 줄어든다. 하지만 모든 조건을 만족하는 설계는 불가능에 가깝다. 적절한 트레이드오프가 필요하다. 설계는 적절한 균형이 필요하고 훌륭한 설계는 적절한 트레이드오프의 결과다.
객체지향 설계는 요구사항이 변경되어도 유연하게 대응할 수 있는 가능성을 높여준다. 객체가 자신의 데이터를 스스로 책임지는 자율적인 존재로 만들어 메시지를 통해 객체들이 상호작용을 하도록 고민해보자.
객체지향의 정답은 없다. 언제나 트레이드오프를 해야하고 무엇이 더 나은지 고민해야한다. 그래서 객체지향이 어렵게 느껴지면서도 어려운 이유다.