모듈 결합도 6단계
🔥 매회 출제 (priority 3)
🌱 왜 배우나
레고 블록을 떠올려 보자. 블록끼리 끼웠다 빼기 쉬우면 원하는 모양을 자유롭게 만들 수 있다. 반대로 블록끼리 접착제로 붙여 놓으면 하나를 떼려다 옆 블록까지 부서진다. 프로그램 모듈(module, 하나의 기능 덩어리)도 똑같다. 모듈끼리 너무 꽉 엮여 있으면 한 곳을 고칠 때마다 다른 곳이 줄줄이 깨진다. “모듈끼리 얼마나 엮여 있는가”를 재는 자가 결합도(Coupling)다. 낮을수록 독립적으로 수정·테스트·재사용할 수 있다.
📖 핵심 개념
결합도란 모듈 사이의 의존 정도를 나타내는 척도다. 낮을수록 좋은 설계이며, 응집도(Cohesion, 모듈 내부의 관련도 — se-cohesion-001 참고)와는 방향이 반대다.
- 결합도는 총 6단계로 나뉜다.
- 강→약 순서: 내용 → 공통 → 외부 → 제어 → 스탬프 → 자료.
- 가장 강한 내용 결합도는 다른 모듈의 속살을 직접 건드리는 최악의 상태다.
- 가장 약한 자료 결합도는 단순한 값만 주고받는 이상적인 상태다.
시험에서는 각 단계의 정의를 “핵심 키워드”로 구분하는 것이 포인트다.
🔍 시각화
결합도 강도 스펙트럼 (나쁨 ← → 좋음)
강(나쁨) 약(좋음)
┃ ┃
▼ ▼
┌────┬────┬────┬────┬──────┬────┐
│내용│공통│외부│제어│스탬프│자료│
└────┴────┴────┴────┴──────┴────┘
▲ ▲
│ │
내부 코드를 단순 값만
직접 참조 주고받음
각 단계 핵심 키워드:
내용 ── 다른 모듈 내부를 직접 참조/수정
공통 ── 전역 변수(모두가 보는 변수) 공유
외부 ── 외부 데이터 형식/규약 공유
제어 ── 제어 플래그(스위치 값) 전달
스탬프 ── 구조체(묶음 데이터) 전달, 일부만 사용
자료 ── 단순 값(숫자, 문자 등)만 전달
↔️ 이웃 개념 구분
- 결합도 vs 응집도: 결합도는 모듈 “사이”의 의존도(낮을수록 좋음), 응집도는 모듈 “안”의 관련도(높을수록 좋음). 항상 세트로 출제된다.
- 공통(Common) vs 외부(External): 둘 다 “공유”가 키워드지만, 공통은 프로그램 안의 전역 변수를 공유하고 외부는 프로그램 바깥의 데이터 형식·통신 규약을 공유한다.
🔑 핵심 용어
- Content(내용) 결합도 [최강]: 다른 모듈의 내부 코드나 데이터를 직접 건드린다. 모듈 독립성을 완전히 박살내는 최악의 결합.
- Common(공통) 결합도: 두 모듈이 전역 변수(Global Variable, 어디서든 접근 가능한 변수)를 함께 쓴다.
- External(외부) 결합도: 외부에서 정해진 데이터 형식이나 통신 규약(프로토콜)을 함께 따른다. 공유 대상이 프로그램 바깥 환경이라는 점에서 공통과 구분된다.
- Control(제어) 결합도: 한 모듈이 다른 모듈에 “이렇게 움직여라”라는 제어 플래그를 넘겨 동작 경로를 결정한다.
- Stamp(스탬프) 결합도: 구조체(레코드·배열 같은 묶음 데이터)를 통째로 넘기지만, 받는 쪽은 그 중 일부만 사용한다.
- Data(자료) 결합도 [최약]: 숫자·문자 같은 단순 값만 주고받는다. 가장 이상적인 결합.
✅ 스스로 가르쳐보기
이 내용을 처음 듣는 친구에게 한 문장으로 결합도를 정의해 준다면 어떻게 말하시겠어요? 이어서 강→약 6단계를 본인의 말로 풀어 보세요. 각 단계에 “공유하는 것이 무엇인가”를 한 단어로 붙여 보면 기억이 훨씬 쉬워집니다.
체크포인트:
- 6단계를 강→약 순서로 빠짐없이 나열할 수 있는가?
- 각 단계의 핵심 키워드(내부 참조, 전역 변수, 외부 규약, 제어 플래그, 구조체, 단순 값)를 짚었는가?
- 공통과 외부의 차이를 “프로그램 안 vs 바깥”으로 구분했는가?
- 결합도와 응집도가 반대 방향이라는 점을 언급했는가?
🎯 기출 포인트
- 강→약 암기법: “내공외제스자” (내용-공통-외부-제어-스탬프-자료)
- 2025-1회: 내용·스탬프·공통 결합도 정의 구분 문제
- 2024-2회: 제어 결합도 — 제어 플래그를 파라미터로 넘기는 유형
- 키워드 연결 필수: “전역 변수 = 공통”, “제어 플래그 파라미터 = 제어”