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

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

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

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

결합도 6단계와 응집도 7단계를 좋음에서 나쁨 순서로 색 막대로 나타낸 개념도
그림 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다. 팬아웃이 지나치게 큰 모듈은 너무 많은 일을 지휘하고 있을 가능성이 높고, 팬인이 큰 모듈은 재사용성이 높지만 변경 영향도 크므로 안정적으로 관리해야 한다.

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

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

시험 직전 한 줄 요약

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

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

Leave a Comment