공든탑앱 열기

모듈화: 결합도와 응집도

정보처리기사 · 화면·애플리케이션 설계 · 약 14분

쉽게 말하면

프로그램을 기능 단위 조각(모듈)으로 나눌 때 좋은 기준이 두 가지 있어요. 결합도는 모듈끼리 얼마나 얽혀 있는지예요. 낮을수록 하나를 고쳐도 다른 데가 덜 망가져요. 응집도는 한 모듈 안의 일들이 얼마나 한 목적에 모여 있는지예요. 높을수록 좋아요. 그래서 정답은 늘 '결합도는 낮게, 응집도는 높게'예요. 단계 이름 순서를 외워 두면 문제가 바로 풀려요.

시험용 정의

모듈화는 시스템을 기능 단위의 모듈로 나누는 것이다. 결합도(Coupling)는 모듈 사이의 의존 정도로, 약한 것부터 자료(Data) → 스탬프(Stamp) → 제어(Control) → 외부(External) → 공통(Common) → 내용(Content) 결합도다. 응집도(Cohesion)는 모듈 안 구성 요소들이 서로 관련된 정도로, 강한 것부터 기능(Functional) → 순차(Sequential) → 교환(Communication) → 절차(Procedural) → 시간(Temporal) → 논리(Logical) → 우연(Coincidental) 응집도다. 좋은 설계는 결합도는 낮고 응집도는 높다. 모듈을 부르는 상위 모듈 수를 팬인, 부르는 하위 모듈 수를 팬아웃이라 한다.

비유로 이해하기

팀 프로젝트로 생각하자. 결합도는 팀끼리 얽힌 정도다. 결과물만 주고받으면(자료) 좋지만, 남의 팀 서랍을 마음대로 열면(내용) 최악이다. 응집도는 한 팀이 한 가지 목표에 집중하는 정도다. '발표 자료 팀'은 좋고, 우연히 남은 사람끼리 모인 '기타 팀'은 나쁘다.

자세히

먼저 알아 둘 말

말뜻
모듈독립적으로 컴파일·수정할 수 있는 프로그램 조각
인터페이스모듈끼리 주고받는 창구 (매개변수, 반환값)
제어 신호상대 모듈의 동작을 정하는 플래그 같은 값
전역 변수모든 모듈이 함께 쓰는 변수
팬인 / 팬아웃나를 부르는 모듈 수 / 내가 부르는 모듈 수

결합도 (약함 → 강함)

단계뜻
1. 자료필요한 값(자료 요소)만 매개변수로 주고받는다
2. 스탬프배열·레코드 같은 자료 구조를 통째로 넘긴다 (일부만 써도)
3. 제어다른 모듈의 처리 흐름을 정하는 제어 신호(플래그)를 넘긴다. 권리 전도 현상
4. 외부모듈이 외부에서 선언한 변수나 외부 장치·형식을 참조한다
5. 공통여러 모듈이 공통(전역) 데이터 영역을 함께 쓴다
6. 내용한 모듈이 다른 모듈의 내부 기능이나 자료를 직접 참조·수정한다

응집도 (강함 → 약함)

단계뜻
1. 기능모든 요소가 단 하나의 기능을 위해 존재
2. 순차한 요소의 출력이 다음 요소의 입력으로 쓰인다
3. 교환(통신)같은 입력·출력 자료를 쓰는 서로 다른 기능이 모여 있다
4. 절차정해진 순서대로 실행되는 여러 기능이 모여 있다
5. 시간같은 시기(초기화, 종료 처리)에 실행되는 기능이 모여 있다
6. 논리비슷한 성격의 처리들이 한 모듈에서 선택되어 실행된다
7. 우연서로 관련 없는 요소들이 모여 있다

외우는 요령

  • 결합도: 자·스·제·외·공·내 (약 → 강)
  • 응집도: 기·순·교·절·시·논·우 (강 → 약)
  • 시스템 구조에서 팬인은 높고 팬아웃은 낮게 하는 것이 좋다 (재사용은 늘리고 복잡도는 줄이기)

기출에서 더 나온 것

말뜻
모듈의 특징독립된 기능 단위, 독립 컴파일 가능, 유일한 이름, 다른 모듈에서 호출할 수 있다
모듈 수와 비용모듈을 너무 잘게 나누면 모듈 사이 인터페이스 비용이 커진다
공통 모듈 명세 원칙정확성(실제 필요한 기능), 명확성(한 가지로 해석), 완전성(빠짐없이), 일관성(서로 충돌 없이), 추적성(출처 확인)
재사용 범위에 따른 분류함수와 객체 재사용, 컴포넌트 재사용, 애플리케이션 재사용

시험에 이렇게 나와요

확인 문제

Q1. 다음 중 결합도가 가장 낮은(가장 좋은) 것은?

  1. 제어 결합도
  2. 내용 결합도
  3. 자료 결합도
  4. 공통 결합도
정답 보기

3번 자료 결합도

결합도는 자료 < 스탬프 < 제어 < 외부 < 공통 < 내용 순으로 강해진다. 값(자료)만 주고받는 자료 결합도가 가장 약하고 좋다.

Q2. 한 모듈이 다른 모듈의 처리 순서를 결정하는 플래그를 넘겨주는 결합도는?

  1. 자료 결합도
  2. 제어 결합도
  3. 스탬프 결합도
  4. 공통 결합도
정답 보기

2번 제어 결합도

제어 신호를 넘기는 제어 결합도. 하위 모듈이 상위 모듈에 지시하는 권리 전도가 생길 수 있다.

Q3. 응집도가 높은 것부터 순서대로 나열한 것은?

  1. 우연 → 논리 → 시간 → 절차
  2. 기능 → 교환 → 순차 → 시간
  3. 기능 → 순차 → 교환 → 절차
  4. 순차 → 기능 → 절차 → 교환
정답 보기

3번 기능 → 순차 → 교환 → 절차

기능 → 순차 → 교환 → 절차 → 시간 → 논리 → 우연 순이다. '기순교절시논우'로 외운다.

Q4. 모듈 안의 한 활동에서 나온 출력이 다음 활동의 입력이 되는 응집도는?

  1. 기능적 응집도
  2. 시간적 응집도
  3. 교환적 응집도
  4. 순차적 응집도
정답 보기

4번 순차적 응집도

출력 → 입력으로 이어지는 순차.

Q5. 배열이나 레코드 같은 자료 구조를 통째로 넘기는 결합도는?

  1. 스탬프 결합도
  2. 내용 결합도
  3. 자료 결합도
  4. 외부 결합도
정답 보기

1번 스탬프 결합도

필요한 일부만이 아니라 구조 전체를 넘긴다.

헷갈리기 쉬운 O·X

좋은 모듈 설계는 결합도를 높이고 응집도를 낮추는 것이다.

정답 보기

X 결합도는 낮게, 응집도는 높게.

공통 결합도는 전역 변수 같은 공유 데이터 영역을 여러 모듈이 함께 쓸 때 생긴다.

정답 보기

O

초기화처럼 같은 시점에 실행되는 기능을 모은 것은 논리적 응집도다.

정답 보기

X 시간적 응집도다.

함께 보면 좋은 개념