# 응집도와 결합도

**응집도(Cohesion)** 는 모듈에 포함된 내부 요소들이 연관되어 있는 정도를 나타냄.

**결합도(Coupling)** 는 의존성의 정도를 나타내며, 다른 모듈에 대해 얼마나 많은 지식을 갖고 있는지를 나타냄.

응집도와 결합도는 변경과 관련이 깊으며, 일반적으로 좋은 설계란 높은 응집도와 낮은 결합도를 가진 모듈로 구성된 설계를 의미함. 객체의 행동에서 객체가 알고 있는 모든 정보를 사용하거나, 변경이 존재하는 경우 특정 모듈만 수정되면 응집도가 높다고 판단할 수 있음.&#x20;

또한, 특정 모듈을 변경하는 경우에 다른 모듈도 변경 해야 하는 상황에서는 결합도가 높다고 판단할 수 있음.

캡슐화의 정도가 응집도와 결합도에 영향을 미치는데, 캡슐화를 지키면 모듈 안의 응집도는 높아지고 모듈 사이의 결합도는 낮아짐. 따라서, 응집도와 결합도를 고려하기 전에 먼저 캡슐화를 향상하기 위해 노력해야함.

### 캡슐화?

객체 내부의 세부적인 사항을 감추는 것을 캡슐화라고 함. 캡슐화의 목적은 변경하기 쉬운 객체를 만드는 것임.

캡슐화를 통해 객체 내부로의 접근을 제한하면 객체와 객체 사이의 결합도를 낮출 수 있기 때문에 설계를 더욱 쉽게 변경할 수 있음. 만약 캡슐화가 악화되어 있다면, 클라이언트 코드로 변경이 전파되어 변경이 쉽지 않을 수 있음. 그리고, 협력을 재사용하기 어려운 상황을 만들어 낼 수 있는데 이러한 상황을 예방하기 위해서 캡슐화는 객체지향 프로그래밍에서 기본기로 여겨짐.
