응집도
모듈 내부의 요소들이 얼마나 밀접하게 관련되어 있는지를 나타내는 척도로, 높을수록 좋은 설계입니다.
응집도 단계 (낮음 → 높음)
| 단계 | 이름 | 설명 |
|---|---|---|
| 1 | 우연적 응집 | 관련 없는 요소들이 우연히 모임 |
| 2 | 논리적 응집 | 유사한 기능끼리 모임 (if/switch로 분기) |
| 3 | 시간적 응집 | 특정 시점에 실행되는 것끼리 모임 |
| 4 | 절차적 응집 | 순서에 따라 실행되는 것끼리 모임 |
| 5 | 통신적 응집 | 같은 데이터를 사용하는 것끼리 모임 |
| 6 | 순차적 응집 | 출력이 다음 입력이 되는 것끼리 모임 |
| 7 | 기능적 응집 | 단일 목적을 위한 요소들로만 구성 O |
낮은 응집도 예시
// X 우연적 응집 - 관련 없는 기능이 한 클래스에
class Utils {
void sendEmail() { ... }
int calculateTax() { ... }
void saveFile() { ... }
String parseDate() { ... }
}
높은 응집도 예시
// O 기능적 응집 - 단일 책임
class EmailSender {
void send(String to, String subject, String body) { ... }
void sendBulk(List<String> recipients, String subject) { ... }
void retry(Email failedEmail) { ... }
}
응집도 vs 결합도
좋은 설계 = 높은 응집도 + 낮은 결합도
응집도 ↑ : 모듈 내부가 긴밀하게 연관
결합도 ↓ : 모듈 간 의존성이 낮음
| 항목 | 응집도 | 결합도 |
|---|---|---|
| 관심사 | 모듈 내부 | 모듈 간 관계 |
| 좋은 방향 | 높을수록 좋음 ↑ | 낮을수록 좋음 ↓ |
| 목적 | 단일 책임 | 독립성 확보 |
응집도가 높으면 변경 시 영향 범위가 좁아 유지보수가 쉬워집니다. 객체지향의 단일 책임 원칙([[SRP) 이 높은 응집도를 추구하는 원칙입니다.