잘 설계된 객체지향 애플리케이션은 작고 응집도 높은 객체로 구성된다.

작고 응집도 높은 객체란 책임이 명확하고 한가지 일만 잘하는 객체를 의미한다.

이런 객체는 단독으로 수행하는 작업이 거의 없어서 서로 협력을 하게 된다.

하지만 협력이 과도하면 문제가 생긴다.

협력한다는 것은 한 객체가 다른 객체의 존재를 안다는 것이고 이는 의존성이 있다와 같은 의미이다.

과도한 의존성은 수정과 변경을 어렵게 만든다.

따라서 우리는 의존성 관리를 적절히 잘해서 협력적이면서도 유연한 설계를 만들어야한다.

두 요소 사이의 의존성이 있다 라는 말은 의존되는 요소가 변경되었을 때 의존하는 요소도 변경될 가능성이 있다와도 같은 의미이다.

따라서 의존성은 변경에 의한 영향 전파 가능성을 의미한다.

의존성이 낮아야 좋은 것이다. → 결합도가 낮아야한다. → 결합도는 한 요소가 자신이 의존하는 요소에 대한 지식이 적을 수록 약해진다. → 더 적게 안다는 것은 더 많은 컨텍스트에서 재사용 가능하다는 것을 의미한다.

더 많이 알수록 더 많이 결합된다. 더 많이 안다는 것은 더 적은 컨텍스트에서 재사용 가능하다는 것을 의미한다.

어떻게 더 적게 알 수 있게 하는가. → 추상화를 이용하자. 정보를 감추고 캡슐화하자.