응집도

모듈 내부의 요소들이 얼마나 밀접하게 관련되어 있는지를 나타내는 척도로, 높을수록 좋은 설계입니다.

응집도 단계 (낮음 → 높음)

단계이름설명
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) 이 높은 응집도를 추구하는 원칙입니다.

CSLOG에서 보기