공통 모듈 설계
목차 18
큰 소프트웨어를 작고 독립적인 모듈로 쪼개고, 그 품질을 결합도·응집도 두 지표로 측정하는 단원. 매 회차 1~3문항 출제되는 빈출 1순위.
핵심 암기 4종: 결합도 6단계 내공외제스자(강→약) · 응집도 7단계 우논시절통순기(약→강) · 황금률 결↓응↑ · In은 재사용·Out은 복잡도
모듈 기초
모듈과 모듈화 ·개념 정의·
[정의] 모듈(Module) = 하나의 기능을 수행하는 독립적·재사용 가능한 작업 단위(함수·클래스·서브시스템). 모듈화(Modularization) = 큰 소프트웨어를 작고 독립적인 모듈로 나누는 설계 활동.
[분류] 모듈화 5대 장점
| 장점 | 한 줄 |
|---|---|
| 재사용성↑ | 한 번 만든 모듈을 여러 곳에서 다시 씀 |
| 유지보수성↑ | 문제 생긴 모듈만 고치면 됨 |
| 복잡도↓ | 거대한 시스템을 작게 쪼개 파악 쉬움 |
| 병행 개발 | 여러 개발자가 모듈을 나눠 동시 개발 |
| 테스트 용이 | 모듈 단위 독립 검증 |
🔑 암기 좋은 모듈 = 단일 책임 + 독립성 + 재사용성 🎯 빈출 '모듈화 장점이 아닌 것' 소거형. 간헐. 💡 보충 레고 블록 한 조각 — 독립적이고, 교체 가능하고, 조합으로 더 큰 구조를 만든다.
공통 모듈 ·재사용 단위·
[정의] 여러 시스템·서비스가 공통으로 사용하는 기능을 모아놓은 재사용 단위 모듈. 인증·결제·로깅·날짜 변환처럼 '어디서나 필요한 기능'을 한 군데 모음.
⚠️ 함정 단순 '모듈'과 구분 — 핵심은 '여러 시스템이 공통으로 쓴다'. 💡 보충 주방 공용 양념통 — 모든 요리가 같은 소금·간장을 가져다 씀.
공통 모듈 명세 5원칙 ·명세 작성·
[분류]
| 원칙 | 의미 |
|---|---|
| 정확성(Correctness) | 시스템에 정말 필요한 모듈인지 정확히 기술 |
| 명확성(Clarity) | 누가 봐도 한 가지 의미로 해석 |
| 완전성(Completeness) | 필요한 모든 사항을 빠짐없이 기술 |
| 일관성(Consistency) | 모듈끼리 충돌·모순 없음 |
| 추적성(Traceability) | 요구사항·근거를 거슬러 추적 가능 |
🔑 암기 정명완일추 (정확·명확·완전·일관·추적) ⚠️ 함정 2강 요구사항 명세 6원리(명완검일수추)와 다름. 7강 SOLID와도 다른 영역 — 이름만 비슷하다. 🎯 빈출 빈칸형·소거형. 간헐.
Fan-In / Fan-Out ·호출 관계 측정·
[비교]
| 구분 | 정의 | 방향 | 의미 |
|---|---|---|---|
| Fan-In | 그 모듈을 호출하는 상위 모듈 수 | 들어오는 화살표 | 재사용성↑ |
| Fan-Out | 그 모듈이 호출하는 하위 모듈 수 | 나가는 화살표 | 제어 복잡도↑(7 이하 권장) |
[A] [B] [C] ← 상위 3개가 M 호출 → Fan-In = 3
↘ ↓ ↙
[M]
↙ ↓ ↘
[D] [E] [F] ← M이 하위 3개 호출 → Fan-Out = 3
🔑 암기 In은 재사용·Out은 복잡도 🎯 빈출 구조도 주고 Fan-In/Out 세는 계산형. 화살표 방향만 세면 정답. 거의 매회. ⚠️ 함정 '바람직한 설계' 보기에 'Fan-Out을 높인다'가 있으면 오답 — Fan-Out은 낮춰야 한다.
결합도 (Coupling)
결합도 정의 ·모듈 사이·
[정의] 모듈 사이의 상호 의존도(연결 강도). 한쪽이 바뀌면 다른 쪽이 받는 영향의 크기.
🔑 암기 결합도는 낮을수록 좋다 — 변경 영향 최소·재사용·테스트 용이. ⚠️ 함정 '결합도가 높을수록 좋다'는 한 글자 함정 단골. 높을수록 좋은 건 응집도. 💡 보충 아파트 벽 — 얇으면(결합도↑) 옆집 소음이 다 넘어온다.
결합도 6단계 ·이 강의 절대 핵심·
[분류] 강한 것 → 약한 것 (위험 → 이상적)
| 강도 | 단계 | 영문 | 식별 키워드 |
|---|---|---|---|
| 강 | ① 내용 | Content | 다른 모듈 내부 변수·코드 직접 참조/수정 |
| ② 공통 | Common | 전역 변수를 여러 모듈이 공유 | |
| ③ 외부 | External | 외부 장치·파일 포맷·통신 프로토콜에 의존 | |
| ④ 제어 | Control | 제어 플래그(동작 방식 신호) 전달 | |
| ⑤ 스탬프 | Stamp | 자료구조 통째(레코드) 전달, 일부만 사용 | |
| 약 | ⑥ 자료 | Data | 단순 파라미터(값) 만 전달 — 가장 이상적 |
🔑 암기 내공외제스자 (강→약) — "내가 공부 외워서 제일 스마트한 자" 🎯 빈출 강→약 순서 나열형 + 양 끝 묻기('가장 강한/약한 결합도?'). 거의 매회 1순위. ⚠️ 함정 양 끝 — 가장 강함 = 내용, 가장 약함(이상적) = 자료.
결합도 보기 단서 즉답 매칭 ·시험 즉답·
[분류]
| 단서 키워드 | 정답 |
|---|---|
| '전역 변수'·'공통 데이터 영역' | 공통 결합도 |
| '플래그·스위치'·'동작 방식 지시' | 제어 결합도 |
| '단순 파라미터'·'값만 전달' | 자료 결합도 |
| '내부 변수 직접 참조·수정' | 내용 결합도 |
| '자료구조·레코드 통째' | 스탬프 결합도 |
🎯 빈출 설명→단계 매칭. 위 세 줄(전역=공통·플래그=제어·단순=자료)만 잡아도 결합도 문제 절반. ⚠️ 함정 보기에 '우연적·기능적'이 섞이면 그건 응집도 단계. 결합도/응집도 단계 이름 섞기 단골.
응집도 (Cohesion)
응집도 정의 ·모듈 내부·
[정의] 한 모듈 내부 요소들이 하나의 목적을 위해 얼마나 서로 관련·결속돼 있는지.
🔑 암기 응집도는 높을수록 좋다 — 결합도와 정반대 방향. ⚠️ 함정 '응집도가 낮을수록 좋다'는 무조건 오답. 💡 보충 필통(높음: 다 필기도구) ↔ 잡동사니 서랍(낮음: 공통점 없음).
응집도 7단계 ·이 강의 절대 핵심·
[분류] 약한 것 → 강한 것 (흩어짐 → 이상적)
| 강도 | 단계 | 영문 | 식별 키워드 |
|---|---|---|---|
| 약 | ① 우연적 | Coincidental | 아무 관련 없는 요소가 우연히 모임 |
| ② 논리적 | Logical | 비슷한 종류·카테고리로 묶음 | |
| ③ 시간적 | Temporal | 같은 시간대에 실행(초기화·종료) | |
| ④ 절차적 | Procedural | 정해진 순서대로 실행(데이터는 무관) | |
| ⑤ 통신적 | Communicational | 같은 입·출력 데이터 사용 | |
| ⑥ 순차적 | Sequential | 한 요소의 출력이 다음 요소의 입력 | |
| 강 | ⑦ 기능적 | Functional | 단일 기능 수행 — 가장 이상적 |
🔑 암기 우논시절통순기 (약→강) — "우리는 논리적인 시대의 절친, 통하는 순간 기적이 와요" 🎯 빈출 약→강 순서 나열형 + 양 끝 묻기. 거의 매회 1순위. ⚠️ 함정 결합도(강→약)와 방향이 정반대. 양 끝 — 가장 약함 = 우연적, 가장 강함 = 기능적.
응집도 보기 단서 즉답 매칭 ·시험 즉답·
[분류]
| 단서 키워드 | 정답 |
|---|---|
| '아무 관련 없는'·'우연히' | 우연적 |
| '비슷한 종류'·'유사한 작업' | 논리적 |
| '같은 시간'·'초기화·종료' | 시간적 |
| '정해진 순서·절차' | 절차적 |
| '같은 입·출력 데이터' | 통신적 |
| '출력→입력'·'파이프라인' | 순차적 |
| '단일 기능'·'한 가지 일' | 기능적 |
🎯 빈출 설명→단계 매칭. 짝짓기 오류형(우연적↔기능적 바꿔치기)도 단골. 💡 보충 절차적 vs 순차적 = '순서만 같음' vs '데이터가 흐름'. 통신적 vs 순차적 = '같은 데이터' vs '데이터 흐름'.
모듈 설계 황금률
결합도↓ · 응집도↑ ·오늘의 한 줄·
[비교]
| 항목 | 결합도(Coupling) | 응집도(Cohesion) |
|---|---|---|
| 측정 대상 | 모듈 사이의 의존도 | 모듈 내부의 결속력 |
| 좋은 방향 | 낮게(↓) | 높게(↑) |
| 단계 수 | 6단계 | 7단계 |
| 순서 두문자 | 내공외제스자(강→약) | 우논시절통순기(약→강) |
| 가장 이상적 | 자료 결합도 | 기능적 응집도 |
| 가장 나쁨 | 내용 결합도 | 우연적 응집도 |
🔑 암기 결↓응↑ — 매 회차 빠지지 않는 1순위 명제. 🎯 빈출 '낮게/높게' 방향 뒤집기 부정형. 시험장에서 헷갈리면 이 한 줄로 복귀.
모듈 설계 6대 지침 ·바람직한 설계·
[분류]
| 지침 | 한 줄 |
|---|---|
| 결합도↓ · 응집도↑ | 황금률 |
| 단일 진입 · 단일 출구 | 입구·출구를 하나로(흐름 추적·디버깅 쉬움) |
| 추상화 | 세부 구현은 숨기고 인터페이스만 노출 |
| 정보 은닉 | 내부 데이터를 외부에서 직접 접근 못 하게 캡슐화 |
| 복잡도 최소화 | 모듈 크기·Fan-Out을 일정 수 이하로 |
| 일관성 | 비슷한 기능은 비슷한 방식으로 |
🎯 빈출 '바람직한 모듈 설계가 아닌 것' 부정형. 거의 매회. ⚠️ 함정 오답 보기 단골 — '결합도 높이기'·'전역 변수 적극 사용'·'Fan-Out 높이기'·'진입·출구 여러 개'.
기출 다지기
[기출 1 출제] 결합도(Coupling)가 강한 순서부터 약한 순서로 올바르게 나열한 것은? (순서 나열형)
- ① 자료 → 스탬프 → 제어 → 외부 → 공통 → 내용
- ② 내용 → 공통 → 외부 → 제어 → 스탬프 → 자료
- ③ 공통 → 내용 → 제어 → 외부 → 자료 → 스탬프
- ④ 외부 → 제어 → 내용 → 공통 → 스탬프 → 자료
정답 및 해설 보기
정답 ②
| 선지 | 판정 | 근거 |
|---|---|---|
| ① | 오답 | 약→강 역순 |
| ② | 정답 | 내공외제스자(강→약) 그대로 |
| ③ | 오답 | 공통·내용 순서 뒤집힘(1순위는 내용) |
| ④ | 오답 | 외부는 3순위인데 첫 자리 |
🔑 내공외제스자. 양 끝 — 내용(가장 강) ↔ 자료(가장 약).
[기출 2 출제] 다음 설명에 해당하는 응집도(Cohesion)는? (설명→용어)
한 모듈 내 요소들이 출력 데이터를 입력으로 받아 다음 작업을 수행하는 형태로, 데이터가 한 방향으로 흐르며 연결되는 응집도.
- ① 우연적 응집도
- ② 절차적 응집도
- ③ 통신적 응집도
- ④ 순차적 응집도
정답 및 해설 보기
정답 ④
| 선지 | 판정 | 근거 |
|---|---|---|
| ① | 오답 | 관련 없는 요소가 우연히 모인 가장 약한 응집도 |
| ② | 오답 | '순서만' 같음. 데이터 흐름과 무관 |
| ③ | 오답 | '같은 데이터'를 사용. 출력→입력 흐름과는 다름 |
| ④ | 정답 | 출력이 다음 작업의 입력으로 흐름 = 순차적 |
🔑 출력→입력·파이프라인 = 순차적. 절차적은 '순서만' 같음(데이터는 무관).
[기출 3 출제] 결합도·응집도의 종류와 설명이 잘못 짝지어진 것은? (짝짓기 오류형)
- ① 자료 결합도 — 단순 매개변수만으로 데이터를 주고받는 가장 약한 결합도
- ② 공통 결합도 — 전역 변수를 여러 모듈이 공유하는 결합도
- ③ 우연적 응집도 — 하나의 기능을 위해 모든 요소가 협력하는 가장 강한 응집도
- ④ 기능적 응집도 — 단일 기능을 수행하기 위해 요소들이 모인 응집도
정답 및 해설 보기
정답 ③
| 선지 | 판정 | 근거 |
|---|---|---|
| ① | 정확 | 단순 매개변수 = 가장 약한 결합도 |
| ② | 정확 | 전역 변수 공유 = 공통 결합도 |
| ③ | 잘못된 짝지음 | '단일 기능 협력'은 기능적 응집도의 설명. 우연적은 '관련 없음'(가장 약) |
| ④ | 정확 | 단일 기능 수행 = 기능적 응집도 |
🔑 우연적 = 관련 없음(가장 약) ↔ 기능적 = 단일 기능(가장 강). 정반대를 바꿔치기하는 단골 함정.
[기출 4 출제] 결합도가 가장 강한(높은) 것은? (양 끝 묻기)
- ① 자료 결합도
- ② 스탬프 결합도
- ③ 제어 결합도
- ④ 내용 결합도
정답 및 해설 보기
정답 ④
| 선지 | 강도 순위(1=가장 강함) |
|---|---|
| ① 자료 | 6순위(가장 약함·이상적) |
| ② 스탬프 | 5순위 |
| ③ 제어 | 4순위 |
| ④ 내용 | 1순위(정답) |
🔑 양 끝 1초 컷 — '가장 강한 결합?' 내용, '가장 약한 결합?' 자료.
[기출 5 출제] 다음 구조도에서 모듈 F의 Fan-In과 Fan-Out을 올바르게 계산한 것은? (계산형)
[A] [B] [C]
\ | /
↘ ↓ ↙
[F]
↙ ↓ ↘
/ | \
[D] [E] [G]
- ① Fan-In = 2, Fan-Out = 3
- ② Fan-In = 3, Fan-Out = 3
- ③ Fan-In = 3, Fan-Out = 2
- ④ Fan-In = 2, Fan-Out = 2
정답 및 해설 보기
정답 ②
| 구분 | 계산 | 결과 |
|---|---|---|
| Fan-In | F를 호출하는 상위 = A, B, C | 3 (들어오는 화살표) |
| Fan-Out | F가 호출하는 하위 = D, E, G | 3 (나가는 화살표) |
🔑 In은 들어오는 화살표(재사용), Out은 나가는 화살표(복잡도). 방향만 세면 정답.
[기출 6 출제] 바람직한 모듈 설계 지침으로 옳지 않은 것은? (부정형)
- ① 결합도는 낮게, 응집도는 높게 설계한다
- ② 모듈은 단일 진입·단일 출구를 갖도록 설계한다
- ③ 모듈의 Fan-Out을 최대한 높여 하위 모듈을 많이 호출하도록 한다
- ④ 정보 은닉을 통해 모듈 내부 데이터를 숨긴다
정답 및 해설 보기
정답 ③
| 선지 | 옳은 지침? |
|---|---|
| ① | 결합도↓·응집도↑ — 황금률 |
| ② | 단일 진입·단일 출구 — 6대 지침 중 하나 |
| ③ | 잘못된 지침 — Fan-Out은 낮춰야(7 이하 권장). 높이면 제어 복잡도↑·변경 영향↑ |
| ④ | 정보 은닉 — 6대 지침 중 하나 |
🔑 모듈 설계 = 결↓·응↑·Out↓·은닉·단일 진입출구·일관성.
[기출 7 출제] 응집도(Cohesion)를 약한 순서부터 강한 순서로 올바르게 나열한 것은? (순서 나열형)
- ① 우연적 → 논리적 → 시간적 → 절차적 → 통신적 → 순차적 → 기능적
- ② 기능적 → 순차적 → 통신적 → 절차적 → 시간적 → 논리적 → 우연적
- ③ 우연적 → 시간적 → 논리적 → 통신적 → 절차적 → 순차적 → 기능적
- ④ 기능적 → 통신적 → 순차적 → 절차적 → 시간적 → 논리적 → 우연적
정답 및 해설 보기
정답 ①
| 선지 | 판정 | 근거 |
|---|---|---|
| ① | 정답 | 우논시절통순기(약→강) 그대로 |
| ② | 오답 | 강→약 역순 |
| ③ | 오답 | 시간적·논리적 순서 뒤집힘(논리적 2위 → 시간적 3위) |
| ④ | 오답 | 강→약 순서 + 통신적·순차적도 뒤집힘 |
🔑 결합도(강→약)와 응집도(약→강)는 순서 방향이 정반대 — 단골 함정.
한 장 요약
| 지표 | 암기 | 방향 | 양 끝 (나쁨 ↔ 이상적) |
|---|---|---|---|
| 결합도 6단계 | 내공외제스자 | 강→약, 낮을수록 좋음(↓) | 내용 ↔ 자료 |
| 응집도 7단계 | 우논시절통순기 | 약→강, 높을수록 좋음(↑) | 우연적 ↔ 기능적 |
| 황금률 | 결↓응↑ | 매 회차 1순위 명제 | — |
| Fan-In/Out | In은 재사용·Out은 복잡도 | In↑ 좋음 / Out↑ 나쁨(7 이하) | — |
| 보기 단서 | 즉답 |
|---|---|
| 전역 변수 | 공통 결합도 |
| 플래그·스위치 | 제어 결합도 |
| 단순 파라미터 | 자료 결합도 |
| 관련 없는·우연히 | 우연적 응집도 |
| 단일 기능 | 기능적 응집도 |
| 출력→입력·파이프라인 | 순차적 응집도 |
🎯 합격 한 끗: 결↓ · 응↑ · 내공외제스자 · 우논시절통순기 네 줄과 양 끝 네 단어(내용↔자료 · 우연적↔기능적)만 입에 붙으면 5강은 끝.
