196. 결합도 단계 - 내용, 공통, 제어, 스탬프, 자료 결합도
핵심 인사이트: 모듈 A와 B가 데이터를 주고받을 때 묶인 끈끈함의 척도다. 다른 사람 일기장 몰래 훔쳐보는 최악의 짓(내용 결합도)부터, 투명하게 우편물에 편지(자료 결합도)만 딱 넣어서 보내는 최고의 소통 방식까지 5단계가 존재한다.
Ⅰ. 결합도(Coupling)의 5단계 스펙트럼
정보처리기사 객관식/실기 필수 암기 사항입니다. (나쁨) 내-공-제-스-자 (좋음) 순서로 외워야 합니다.
Ⅱ. 단계별 상세 설명 (나쁜 순서대로)
1. 내용 결합도 (Content Coupling) - [최악 💩]
- 개념: 모듈 A가 모듈 B의 내부 로직, 변수, 데이터를 직접 참조하거나 수정하는 가장 극단적이고 치명적인 결합 상태입니다.
- 문제점: 모듈 B의 코드를 단 한 줄이라도 수정하면, B의 내부를 훔쳐보고 있던 모듈 A도 즉시 고장 납니다. (캡슐화 및 정보 은닉 원칙 완전 위배)
- 예시:
goto문을 통해 다른 모듈의 중간 코드로 건너뛰어버리는 경우, B 객체의private변수를 A가 강제로 열어 수정하는 경우.
2. 공통 결합도 (Common Coupling)
- 개념: 여러 모듈이 외부에 선언된 글로벌(전역) 변수나 전역 데이터 영역을 다 같이 공유해서 사용하는 상태입니다.
- 문제점: 전역 변수의 값이 예기치 않게 바뀌면, 이 변수를 바라보고 있는 수십 개의 모듈이 동시에 영향을 받아 버그 추적이 불가능해집니다(Spaghetti State).
- 예시:
global int total_sales;를 선언해 두고 A, B, C 모듈이 다 같이 이 값을 더하고 빼며 쓰는 경우.
3. 제어 결합도 (Control Coupling)
- 개념: 모듈 A가 모듈 B를 호출할 때 단순히 계산할 데이터를 주는 것이 아니라, "이렇게 저렇게 행동해라"라는 제어 신호(Flag, Switch 값)를 매개변수로 전달하여 B의 실행 흐름을 통제하는 상태입니다.
- 문제점: 호출하는 쪽(A)이 호출받는 쪽(B)의 내부 로직(
if-else)을 꿰뚫고 있어야 하므로 독립성이 떨어집니다. - 예시:
프린트_모듈(데이터, "레이저프린터로_출력해")➔ 플래그를 던져 내부 분기를 조작함.
4. 스탬프 결합도 (Stamp Coupling) / 검인 결합도
- 개념: 모듈 A와 B가 데이터를 주고받을 때, 단순 변수가 아니라 배열(Array), 레코드(Record), 객체(Object), 자료구조 등 거대한 포장지 덩어리를 통째로 전달하는 상태입니다.
- 문제점: A 모듈은 전달받은 거대한
고객 정보 객체중에서 오직나이값 하나만 필요한데, 객체 전체에 의존하게 되어 불필요한 결합이 생깁니다. 나중에 객체 구조가 바뀌면 A 모듈도 쓸데없이 다시 컴파일해야 합니다. - 예시: 나이 계산 모듈에
calcAge(User user)처럼User객체 통째로 넘기기.
5. 자료 결합도 (Data Coupling) - [최고 🌟]
- 개념: 모듈 간의 인터페이스로 오직 꼭 필요한 단순 자료(매개변수, 숫자, 문자열)만을 주고받는 가장 이상적이고 느슨한 결합 상태입니다.
- 장점: 모듈 B가 파라미터를 받아 내부적으로 어떻게 지지고 볶든 모듈 A는 알 바 아닙니다. 서로 영향을 주지 않고 완벽한 블랙박스로 동작합니다.
- 예시: 나이 계산 모듈에
calcAge(String birthDate)처럼 생년월일 문자열 딱 1개만 넘기기.
📢 섹션 요약 비유: 친구(모듈 B)에게 내 통장 잔고를 계산해 달라고 할 때 5가지 방법.
- 내용: 내가 친구 머릿속에 직접 칩을 꽂아 생각 조종하기.
- 공통: 동네 광장 게시판에 내 계좌번호 써놓고 동네 사람 다 같이 쓰기.
- 제어: 친구한테 "계산기 꺼내서 1번 버튼 누르고 5를 더해"라고 하나하나 지시하기.
- 스탬프: 내 지갑 통째로 넘겨주고 알아서 찾아서 하라고 하기.
- 자료(최고): "야, 5만 원에서 3만 원 빼면 얼마야?" 하고 딱 숫자만 말하기.