결합도와 응집도 정리, 모듈 설계에서 낮은 결합·높은 응집이 정답인 이유 (정보처리기사)

코드를 고칠 때 한 군데만 바꿨는데 엉뚱한 곳이 줄줄이 깨진 경험이 있다면, 그것이 결합도가 높은 설계의 증상이다. 정보처리기사 소프트웨어 설계 단원에서 결합도·응집도의 종류와 순서를 묻는 문제는 거의 매 회 나오고, 정보관리기술사 소프트웨어 공학 영역에서도 설계 품질 기준으로 다룬다. 두 개념은 쓰임이 분명해서 비유로 잡으면 순서도 저절로 외워진다.

결합도는 모듈 사이의 의존 정도, 응집도는 모듈 안의 관련성이다

회사에 비유하면 이해가 쉽다. 응집도는 한 부서 안에서 구성원이 같은 일을 하는 정도다. 결합도는 부서끼리 서로의 내부 사정을 얼마나 알아야 일이 돌아가는가다. 좋은 설계는 부서 안은 한 가지 목적으로 단단하고(높은 응집도), 부서 사이는 필요한 서류만 주고받는(낮은 결합도) 모습이다. 이 기준은 Stevens, Myers, Constantine의 구조적 설계 이론에서 정리된 것으로 알려져 있다.

그림 1. 결합도·응집도 순서 개념도. 위쪽일수록 바람직하다. 직접 그린 설명용 그림이다.

결합도는 모듈이 무엇을 공유하느냐로 여섯 단계로 나뉜다

결합도(좋음→나쁨) 설명 예
자료(Data) 필요한 값만 매개변수로 주고받음 area(width, height)
스탬프(Stamp) 구조체·레코드 전체를 넘기고 일부만 사용 주문 객체 전체를 넘겨 금액만 사용
제어(Control) 플래그로 상대 모듈의 처리 흐름을 지시 print(data, mode)에서 mode로 분기
외부(External) 외부에서 정한 데이터 형식·인터페이스를 공유 같은 파일 포맷, 통신 프로토콜 공유
공통(Common) 전역 변수를 여러 모듈이 읽고 씀 공유 전역 설정값을 여러 곳에서 수정
내용(Content) 다른 모듈의 내부 데이터나 코드를 직접 참조·분기 상대 모듈 중간으로 점프, 내부 변수 직접 수정

응집도는 모듈 안의 요소가 한 목적을 위해 묶인 정도로 일곱 단계로 나뉜다

응집도(높음→낮음) 묶이는 기준 예
기능적 하나의 기능만 수행 세금 계산 모듈
순차적 앞 출력이 뒤 입력이 되는 순서 파일 읽기 → 파싱 → 검증
통신적 같은 입력·출력 데이터를 사용 같은 레코드로 합계와 평균을 각각 계산
절차적 실행 순서가 정해진 절차를 따름 로그인 후 메뉴 표시·권한 확인을 한 모듈에서
시간적 같은 시점에 실행되어 묶임 프로그램 시작 시 초기화 작업 모음
논리적 논리적으로 비슷한 기능을 모아 선택 실행 입력 종류를 인자로 받아 분기하는 입출력 모듈
우연적 서로 관련 없는 기능의 모음 잡다한 함수를 담은 utils

외울 때는 응집도의 앞 글자를 “기·순·통·절·시·논·우”로 묶고, 결합도는 “자·스·제·외·공·내”로 묶는 방식이 많이 쓰인다.

같은 기능도 제어 결합을 자료 결합으로 바꾸면 수정 범위가 줄어든다

// 제어 결합: 호출자가 mode로 내부 흐름을 지시
report(data, "SHORT")   // 내부가 mode를 알아야 함

// 자료 결합: 필요한 값만 전달, 역할별로 함수 분리
shortReport(data)
longReport(data)

첫 번째 방식은 mode 값이 하나 추가될 때마다 호출자와 report 내부가 함께 바뀐다. 두 번째 방식은 각 함수가 하나의 일만 하므로(기능적 응집도) 수정 범위가 함수 안으로 국한된다.

팬인·팬아웃으로 구조를 점검하는 방법도 있다. A가 B·C·D를 호출하고 B와 C는 E를, D는 F를 호출하는 구조에서 A의 팬아웃은 3, E의 팬인은 2다. 팬아웃이 지나치게 큰 모듈은 너무 많은 일을 지휘하고 있을 가능성이 높고, 팬인이 큰 모듈은 재사용성이 높지만 변경 영향도 크므로 안정적으로 관리해야 한다.

답안에는 순서표와 함께 왜 낮은 결합·높은 응집이 유지보수에 유리한지를 적는다

  • 정의 → 결합도·응집도 단계 표 → 개선 사례 → 설계 원칙 연결(정보 은닉, 단일 책임 원칙) 순으로 쓴다.
  • “낮은 결합도 + 높은 응집도 = 변경 영향 범위 축소, 재사용·테스트 용이”를 결론으로 삼는다.
  • 실무 연결: 전역 상태 최소화, 인터페이스를 통한 의존, 모듈별 단위 테스트, 의존 관계 시각화 도구로 순환 의존 점검.

시험 직전 한 줄 요약

결합도는 자·스·제·외·공·내 순으로 나빠지고, 응집도는 기·순·통·절·시·논·우 순으로 나빠지며, 좋은 설계는 결합도를 낮추고 응집도를 높인다.

이 글은 학습용 정리이며 실제 시험 문항과 다를 수 있다. 출제 기준은 큐넷 등 공식 공지를 확인하라. 그림은 개념도이며 실측 데이터가 아니다.

zerg96

Recent Posts

불균형 데이터 처리, 정확도 98%인데 쓸모없는 모델이 되는 이유와 SMOTE·클래스 가중치 비교 (빅데이터분석기사)

환자 1,000명 중 암 환자가 20명뿐인 데이터로 모델을 만들었는데 정확도가 98%라면 훌륭한 모델일까? 안타깝게도 "모두…

2시간 ago

세마포어와 뮤텍스 차이, P·V 연산과 생산자-소비자 문제로 이해하는 동기화 (정보처리기사)

두 스레드가 같은 변수를 동시에 고치면 결과가 실행할 때마다 달라진다. 이 문제를 푸는 도구가 세마포어와…

2시간 ago

커버로스(Kerberos) 인증 흐름 정리, AS·TGS·티켓 6단계와 비밀번호를 보내지 않는 이유 (정보보안기사)

사내 시스템에 한 번 로그인했는데 파일 서버, 메일, 인트라넷이 비밀번호를 다시 묻지 않는다면 뒤에서 커버로스(Kerberos)가…

2시간 ago

B-Tree 인덱스 원리와 인덱스를 못 타는 조건, 1억 건 중 한 건을 5블록으로 찾는 계산 (SQLD)

"인덱스를 만들었는데 왜 안 타요?" SQL 튜닝에서 가장 자주 나오는 질문이다. 답을 알려면 인덱스가 어떤…

2시간 ago

2026년 11월 금융 DT 테스트 시험 일정 (접수·시험·발표)

11월에 일정이 있는 금융 DT 테스트 시험을 정리했습니다. 접수, 시험, 합격 발표 날짜를 한 번에…

4시간 ago

2026년 11월 은행FP 시험 일정 (접수·시험·발표)

11월에 일정이 있는 은행FP 시험을 정리했습니다. 접수, 시험, 합격 발표 날짜를 한 번에 볼 수…

7시간 ago