개발을 하다보면 이러한 단어들을 들어보았을 것이다.
다 비슷한 느낌인거 같은데 무슨 차이가 있길래 구분해서 부르는 걸까?
응집도는 모듈(클래스, 함수, 메서드 등) 내부의 요소들이 얼마나 밀접하게 관련되어 있는지를 나타낸다.
즉, 서로 관련된 기능들만 모여있다면 응집도가 높다고 볼 수 있다.
예를들면
User class 에는 user 정보관리만 하는 기능이 있다? → 응집도 높음

Utility class에는 DB연결, 파일 읽기 등등 잡다한 기능들 있다 → 응집도 낮음

하나의 모듈이 다른 모듈에 얼마나 의존하고 있는지를 나타낸다.
예시를 들면, 결합도가 높다면 다리가 고장나도 몸통까지 바꿔야 한다는 소리다.

그림에서와 같이 B모델은 여러 모듈과 연결이 되어 있기에, B모듈을 수정하면 다른 여러 모델도 수정이 되어야 할 수도 있다.
결합도가 낮은 것을 "느슨하게 연결되었다" 라고 말하기도 한다.
하나의 모듈이 다른 모듈의 기능을 필요로 한다는 것을 의미한다.
즉 특정 모듈이 동작하려면 다른 모듈이 꼭 요하다는 것을 말한다.
한 줄로 요약하면
["낮은 결합도와 높은 응집도"를 가진 코드를 개발하자.]
최근에는 결합도들을 낮추기 위해 MSA 아키텍처를 많이 도입하고 있을 정도로 결합도가 높은 것은 좋지않다. 고로 최대한 모듈들을 독립적으로 설계하고, 관련 기능들을 모아놓아 응집도를 높이도록 하자.