1 결합도(Coupling) & 응집도(Cohesion)
좋은 모듈 설계의 두 축 — 결합도는 낮게, 응집도는 높게.
핵심 결합도(Coupling)는 모듈 간 상호 의존 정도, 응집도(Cohesion)는 모듈 내부 구성요소의 관련성 정도. 잘 설계된 모듈은 결합도 ↓ 응집도 ↑.
결합도 6단계 (약함 → 강함)
| 단계 | 결합도 | 정의 |
|---|---|---|
| 1 (약) | 자료(Data) | 매개변수로 필요한 데이터(값)만 전달. 가장 이상적. |
| 2 | 스탬프(Stamp) | 배열·구조체·객체 등 자료구조 전체를 전달(일부만 사용). |
| 3 | 제어(Control) | 다른 모듈의 처리 흐름을 좌우하는 제어 신호(플래그)를 전달. |
| 4 | 외부(External) | 외부 포맷·프로토콜·통신 형식 등을 공유. |
| 5 | 공통(Common) | 전역 변수(공유 데이터)를 여러 모듈이 함께 참조. |
| 6 (강) | 내용(Content) | 한 모듈이 다른 모듈의 내부 기능·데이터에 직접 접근. 최악. |
응집도 7단계 (약함 → 강함)
| 단계 | 응집도 | 정의 |
|---|---|---|
| 1 (약) | 우연적(Coincidental) | 아무 관련 없는 기능들을 우연히 한 모듈에 모음. 최악. |
| 2 | 논리적(Logical) | 논리적으로 유사한 성격의 기능을 묶음(예: 모든 입력 처리). |
| 3 | 시간적(Temporal) | 같은 시점에 실행되는 기능을 묶음(예: 초기화 루틴). |
| 4 | 절차적(Procedural) | 정해진 순서(절차)대로 수행되는 기능들을 묶음. |
| 5 | 교환/통신적(Communicational) | 동일한 입력·출력 데이터를 사용하는 기능들을 묶음. |
| 6 | 순차적(Sequential) | 한 기능의 출력이 다음 기능의 입력으로 순차 연결. |
| 7 (강) | 기능적(Functional) | 모든 요소가 단일 기능 수행에 기여. 가장 이상적. |
암기팁 결합도 자 스 제 외 공 내 · 응집도 우 논 시 절 통 순 기 (둘 다 왼쪽이 약함, 오른쪽이 강함).
함정주의 방향 혼동 주의! 결합도는 낮을수록, 응집도는 높을수록 좋은 설계다. "결합도 높게"가 좋다고 헷갈리지 말 것.
✅ 자가점검
Q1. 결합도를 약한 것부터 강한 순서로 나열하시오.
자료(Data) → 스탬프(Stamp) → 제어(Control) → 외부(External) → 공통(Common) → 내용(Content). 암기: 자 스 제 외 공 내. 결합도는 낮을수록(왼쪽) 좋은 설계.
Q2. 응집도가 가장 강한(이상적인) 단계와 가장 약한 단계는?
가장 강함 = 기능적(Functional) 응집도(모든 요소가 단일 기능에 기여). 가장 약함 = 우연적(Coincidental) 응집도. 전체 순서: 우 논 시 절 통 순 기.