응집도
한 모듈 내부의 처리 요소(데이터, 메소드 등)들이 서로 관련되어 있는 정도.
즉, 모듈이 독립적인 기능을 수행하는지 또는 하나의 기능을 중심으로
책임이 잘 뭉쳐있는지를 나타내며 높은 응집도를 가질수록 좋다.
※ 한 개의 메소드도 모듈이라고 할 수 있다.
응집도의 종류
Positive ————— 기능 / 순차 / 통신 / 시간 / 절차 / 논리 /우연 ————— Negative
※ 나쁜 응집도를 발견하는 것도 중요하다.
기능적 응집도 (Positive)
모듈이 하나의 기능만을 수행하고,
모듈의 요소들은 이 기능을 위해서 필수적인 부분일 때 높은 기능적 응집도를 갖는다.
순차적 응집도 (Negative)

절차적 응집도 (Negative)
모듈이 절차에만 집중하여 정해진 순서대로 처리하고자 할 때 발생하는 응집도.
절차와 절차 사이에 강한 결합을 만들기 때문에 주의해야 한다.

+ 통신적 응집도
통신적 응집도 (Negative)
동일한 데이터를 사용하고 있지만 서로 관계 없는 일을 하는 경우

논리적 응집도 (Negative)

함수 안에서 조건에 따라 다른 동작을 하는 것은 좋지 않다.
그것은 두 가지 이상의 일을 하고 있다는 의미이기 때문이다.
조건에 따라 다른 동작을 한다는 것을 예측하기가 어렵기 때문이다.
우연적 응집도 (Negative)
모듈의 요소들이 완전히 무작위로 그룹화되는 경우 발생하는 응집도.
의도라기보다는 우연적으로 발생. 가장 나쁘다.
응집도를 높이는 방법
컴포넌트의 목적을 명확히 하고 이 목적을 위해서 데이터와 메소드가 뭉치게 한다.
응집도를 높여야 하는 이유
1. 이해하기 쉽다

2. 의도를 파악하기 쉽다

3. 테스트하기 쉽다
테스트하는 대상이 많아지면 무언가 잘못된 것이 있는지 의심해 보는 것이 좋다.
컴포넌트를 더 작게 나누어야 한다는 신호.
대부분의 문제는 나의 코드에 어떤 변경 사항이 일어나거나
혹은 나의 코드를 다른 사람이 사용할 때 일어난다. 이때 유용한 것이 테스트이다.
- 수정사항에 대한 피드백
- 코드에 대한 설명 (문서화)
테스트를 먼저 작성한다면, 처음부터 사용하기 좋은 코드를 설계할 수 있다.

뒤집어보기
- 기능적 응집도가 높다고 무조건 좋은 것은 아니며,
목적에 맞게 필요한 만큼 응집되어 있어야 한다.
- 결합도에 관해서 알아보기