결합도·응집도·팬인·팬아웃과 공통 모듈
결합도와 응집도, 팬인·팬아웃을 통해 모듈 독립성과 공통 모듈의 품질을 판단한다.
모듈 독립성
모듈 독립성은 각 모듈이 하나의 분명한 책임을 수행하고 다른 모듈의 내부에 최소한으로 의존하는 정도다.
- 낮은 결합도: 모듈 간 의존을 줄인다.
- 높은 응집도: 한 모듈 안의 요소가 하나의 책임에 밀접하게 관련된다.
두 값은 서로 관련되지만 별개의 지표다. 결합도가 낮다고 응집도가 자동으로 높아지는 것은 아니다.
결합도
강한 결합에서 약한 결합 순서는 다음과 같다.
내용 → 공통 → 외부 → 제어 → 스탬프 → 자료
| 유형 | 의미 | 판별 단서 |
|---|---|---|
| 내용 결합 | 다른 모듈의 내부 자료·코드에 직접 접근 | 내부 분기·지역 데이터 직접 변경 |
| 공통 결합 | 여러 모듈이 전역 자료 영역을 공유 | 공통 데이터 변경이 넓게 파급 |
| 외부 결합 | 외부 형식·프로토콜·장치 인터페이스에 공동 의존 | 파일 형식, 통신 규약, 장치 인터페이스 |
| 제어 결합 | 호출 모듈이 제어 정보를 넘겨 상대의 처리 방향 결정 | 플래그·명령 코드 전달 |
| 스탬프 결합 | 필요한 일부만 사용하면서 복합 자료 구조 전체 전달 | 레코드·객체 전체 전달 |
| 자료 결합 | 필요한 단순 자료만 매개변수로 전달 | 최소한의 값 전달 |
제어 결합은 불리언 자료형 자체가 문제가 아니라, 그 값이 호출 대상의 내부 제어 흐름을 지시하는지가 핵심이다.
응집도

결합도·응집도 비교표
강한 응집에서 약한 응집 순서는 다음과 같다.
기능적 → 순차적 → 교환적(통신적) → 절차적 → 시간적 → 논리적 → 우연적
| 유형 | 의미 | 판별 단서 |
|---|---|---|
| 기능적 | 하나의 명확한 기능 수행 | 모든 요소가 같은 결과에 기여 |
| 순차적 | 한 처리의 출력이 다음 처리의 입력 | 데이터가 단계적으로 이어짐 |
| 교환적 | 같은 입력이나 출력을 공유 | 동일 자료를 중심으로 묶임 |
| 절차적 | 정해진 실행 순서 때문에 묶임 | 데이터보다 절차 순서가 중심 |
| 시간적 | 같은 시점에 수행되어 묶임 | 초기화·종료 처리 |
| 논리적 | 비슷한 종류의 기능을 선택적으로 수행 | 플래그로 입력·출력 기능 선택 |
| 우연적 | 관련 없는 작업이 임의로 묶임 | 공통 목적이 없음 |
순차적 응집은 출력→입력의 데이터 관계가 있고, 절차적 응집은 단지 실행 순서가 관련된다는 차이가 있다.
팬인과 팬아웃

팬인·팬아웃 예시도
- 팬인(Fan-in): 해당 모듈을 직접 호출하는 서로 다른 모듈의 수
- 팬아웃(Fan-out): 해당 모듈이 직접 호출하는 서로 다른 모듈의 수
실행 횟수나 간접 호출 전체를 세는 것이 아니다. 구조도의 화살표 방향과 범례를 먼저 확인한다.
- 팬인이 높음: 여러 곳에서 재사용되는 중심 모듈일 수 있지만 변경 파급도 클 수 있다.
- 팬아웃이 높음: 많은 모듈을 조정하므로 복잡성과 의존성이 커질 수 있다.
팬아웃 개수와 결합도의 강도는 같은 지표가 아니다. 호출 대상이 많아도 각 연결이 자료 결합일 수 있다.
공통 모듈과 재사용
공통 모듈은 여러 기능에서 같은 의미와 책임으로 반복되는 처리를 한 곳에 모은 재사용 단위다. 단순히 코드 모양이 비슷하다는 이유만으로 합치면 서로 다른 변경 이유가 묶일 수 있다.
명세 품질 기준
| 기준 | 의미 |
|---|---|
| 정확성 | 필요한 기능과 결과를 올바르게 기술 |
| 명확성 | 한 가지 의미로 이해 가능 |
| 완전성 | 입력·출력·예외·제약 누락 없음 |
| 일관성 | 다른 명세와 용어·규칙이 충돌하지 않음 |
| 추적성 | 요구사항과 설계·시험에 연결 가능 |
공통 모듈 인터페이스에는 목적, 입력·출력, 사전 조건, 오류, 부수 효과를 명확히 한다.