모든 강의를 무료로 볼 수 있어요. 회원가입 없이도 학습 가능합니다.

3강 / 전체 13강

구조적 설계와 모듈화

8분 읽기 조회 18

응집도 7단계(기능→우연적)와 결합도 6단계(자료→내용)를 강함·약함 방향으로 완전히 이해하고, 팬인·팬아웃 계산과 소프트웨어 재사용 유형을 기출 중심으로 정복한다.

🎯 학습 목표

이 강을 마치면 다음을 할 수 있습니다.

  • 응집도 7종을 강한 것부터 약한 순서로 나열하고 각각의 특성을 설명할 수 있습니다.
  • 결합도 6종을 낮은 것부터 높은 순서로 나열하고 각각의 특성을 설명할 수 있습니다.
  • 팬인과 팬아웃을 계산하고 시스템 구조도에서 의미를 해석할 수 있습니다.
  • 소프트웨어 재사용 유형을 구분하고 공통 모듈 명세 기법을 설명할 수 있습니다.

🧩 모듈화란 무엇인가

이 섹션에서는 소프트웨어 설계의 핵심 원칙인 모듈화의 개념과 목적을 살펴보겠습니다.

모듈(Module)이란 소프트웨어를 독립적으로 분해한 기능 단위입니다. 함수, 클래스, 서브시스템, 컴포넌트 모두 모듈의 형태입니다. 모듈화(Modularization)는 복잡한 시스템을 관리 가능한 작은 단위로 분해하는 설계 전략입니다. 모듈화의 목적은 복잡성 감소, 개발 병렬화, 유지보수 용이성, 재사용성 향상입니다.

모듈 설계에서 가장 중요한 두 가지 품질 지표가 있습니다. 응집도(Cohesion)와 결합도(Coupling)입니다. 좋은 모듈은 "높은 응집도, 낮은 결합도(High Cohesion, Low Coupling)"를 가져야 합니다. 응집도는 모듈 내부 요소들이 얼마나 밀접하게 관련되어 있는지의 척도이고, 결합도는 서로 다른 모듈들이 얼마나 의존하는지의 척도입니다.

🔴 응집도 7종 — 강함에서 약함으로

이 섹션에서는 응집도의 7가지 유형을 강한 것부터 약한 순서로 완전히 살펴보겠습니다.

응집도는 높을수록(강할수록) 좋습니다. 높은 응집도는 모듈이 하나의 명확한 목적을 위해 설계되었다는 의미입니다. 응집도를 강한 순서로 암기하는 가장 효과적인 방법은 "기능 순절 시논우"입니다: 기능적 → 순차적 → 절차적 → 시간적 → 논리적 → 우연적. 또는 "기순절 시논우"로 암기하세요.

순위응집도 유형특성예시
1 (가장 강함)기능적(Functional)모듈의 모든 요소가 단일 기능 수행을 위해 기여로그인 처리 함수(입력검증→인증→세션생성만 수행)
2순차적(Sequential)한 요소의 출력이 다음 요소의 입력으로 사용되는 순서적 처리데이터 읽기 → 파싱 → 변환 → 저장 파이프라인
3절차적(Procedural)순서가 중요하며 특정 절차를 따라 처리되는 요소들파일 열기 → 읽기 → 닫기 (데이터 공유 없음)
4시간적(Temporal)특정 시간대에 함께 실행되는 요소들의 묶음시스템 초기화 루틴(DB연결+캐시로드+로그초기화)
5논리적(Logical)논리적으로 유사한 기능을 하나의 모듈에 묶음, 매개변수로 기능 선택입출력 처리 모듈(파일IO·DB IO·네트워크IO 모두 포함)
6우연적(Coincidental)관련 없는 기능들을 임의로 모아둔 것. 가장 나쁜 응집도유틸리티 모음(날짜계산+이메일발송+PDF생성이 한 모듈)

기출에서 자주 나오는 포인트를 정리해 보겠습니다. 첫째, 기능적 응집도가 가장 높고(좋고) 우연적 응집도가 가장 낮습니다(나쁩니다). 둘째, 순차적 응집도는 "한 요소의 출력이 다음 요소의 입력"이라는 파이프라인 특성이 핵심입니다. 셋째, 절차적 vs 순차적의 차이는 데이터 공유 여부입니다. 순차적은 출력→입력으로 데이터가 전달되지만, 절차적은 순서만 중요하고 데이터 전달 없이 독립적으로 실행됩니다. 넷째, 논리적 응집도는 매개변수(플래그)로 기능을 선택하는 방식이 특징입니다.

🔗 결합도 6종 — 낮음에서 높음으로

이 섹션에서는 결합도의 6가지 유형을 낮은 것(좋은 것)부터 높은 순서로 완전히 살펴보겠습니다.

결합도는 낮을수록 좋습니다. 낮은 결합도는 모듈 간 의존성이 적어 한 모듈의 변경이 다른 모듈에 영향을 주지 않는다는 의미입니다. 결합도를 낮은 순서로 암기하는 방법은 "자스제외공내"입니다: 자료 → 스탬프 → 제어 → 외부 → 공통 → 내용.

순위결합도 유형특성예시
1 (가장 낮음·좋음)자료(Data)모듈 간 단순한 데이터(값)만 전달add(int a, int b) — 정수 두 개만 전달
2스탬프(Stamp)레코드·구조체 같은 자료구조 전체를 전달(일부만 사용)processUser(User user) — User 객체 전체 전달
3제어(Control)제어 플래그(boolean·코드)를 전달해 상대 모듈의 동작 제어print(data, true) — true면 헤더 포함 출력
4외부(External)전역 변수·공유 파일 등 외부 환경을 공유두 모듈이 같은 전역 변수 참조
5공통(Common)공통 데이터 영역(전역 데이터 구조)을 여러 모듈이 공유여러 모듈이 동일한 전역 배열·구조체 접근
6 (가장 높음·나쁨)내용(Content)한 모듈이 다른 모듈의 내부 동작·데이터를 직접 참조·수정모듈 A가 모듈 B의 내부 변수를 직접 수정

기출 핵심 포인트입니다. 첫째, 자료 결합도가 가장 낮고(좋고) 내용 결합도가 가장 높습니다(나쁩니다). 둘째, 자료 vs 스탬프의 차이는 전달하는 것의 형태입니다. 자료는 단순 값(int, String), 스탬프는 구조체·클래스 전체입니다. 셋째, 제어 결합도는 플래그 변수로 상대 모듈 동작을 제어하는 것이 특징입니다. 넷째, 외부와 공통의 차이는 미묘합니다. 외부는 외부 환경(파일, I/O 장치) 공유, 공통은 전역 데이터 구조 공유입니다. 다섯째, 내용 결합도는 캡슐화를 완전히 파괴하는 최악의 결합도입니다. GOTO 문으로 다른 모듈 내부로 직접 점프하는 것이 대표적인 예입니다.

📊 팬인·팬아웃 계산

이 섹션에서는 모듈 구조도에서 모듈 간 제어 관계를 수치화하는 팬인과 팬아웃을 살펴보겠습니다.

팬인(Fan-In)은 특정 모듈을 호출하는 모듈의 수입니다. 즉, 해당 모듈로 들어오는 제어 흐름의 수입니다. 팬인이 높다는 것은 해당 모듈이 많은 곳에서 사용된다는 의미로, 재사용성이 높은 모듈임을 나타냅니다. 다만 너무 높으면 그 모듈의 변경이 많은 모듈에 영향을 미칩니다.

팬아웃(Fan-Out)은 특정 모듈이 호출하는 모듈의 수입니다. 즉, 해당 모듈에서 나가는 제어 흐름의 수입니다. 팬아웃이 높다는 것은 해당 모듈이 많은 하위 모듈에 의존한다는 의미로, 결합도가 높아질 가능성이 있습니다. 일반적으로 팬아웃은 7±2 이내를 권장합니다.

모듈 구조도에서 팬인·팬아웃 계산 방법입니다. 모듈 A가 B, C, D를 호출하고, 모듈 E, F도 B를 호출한다면: B의 팬인은 3(A, E, F에서 호출됨), A의 팬아웃은 3(B, C, D를 호출함)입니다. 기출에서는 주어진 구조도에서 특정 모듈의 팬인 또는 팬아웃을 직접 계산하는 문제가 출제됩니다. 팬인은 화살표가 들어오는 수, 팬아웃은 화살표가 나가는 수로 간단히 셀 수 있습니다.

♻️ 소프트웨어 재사용과 공통 모듈 명세

이 섹션에서는 개발 생산성을 높이는 소프트웨어 재사용 전략과 공통 모듈 명세 기법을 살펴보겠습니다.

소프트웨어 재사용(Software Reuse)은 이미 개발된 소프트웨어 자산을 새로운 개발에 활용하는 전략입니다. 재사용을 통해 개발 비용·기간 절감, 품질 향상, 검증된 컴포넌트 활용이 가능합니다. 재사용 수준에 따라 크게 세 가지로 분류됩니다.

  • 컴포넌트(Component) 재사용: 독립적으로 배포 가능한 소프트웨어 단위를 재사용합니다. UI 컴포넌트 라이브러리, 날짜 처리 라이브러리 등이 예입니다. 블랙박스 형태로 내부 구현 없이 인터페이스만으로 사용합니다.
  • 서비스(Service) 재사용: API나 웹 서비스 형태로 제공되는 기능을 재사용합니다. 지도 API, 결제 API, 인증 서비스 등이 예입니다. SOA(서비스 지향 아키텍처)와 MSA(마이크로서비스 아키텍처)의 핵심입니다.
  • 프레임워크(Framework) 재사용: 특정 도메인 애플리케이션의 뼈대를 재사용합니다. Spring(Java), Django(Python), React(JavaScript) 등이 예입니다. 프레임워크는 "제어의 역전(IoC)"을 통해 개발자가 특정 부분만 구현하면 전체가 동작하도록 설계됩니다.

공통 모듈 명세 기법은 팀 전체가 공유하는 모듈을 명확히 정의하는 방법입니다. 주요 기법으로는 MBO(Module Based Objectives) — 모듈 목표 기반 명세, PDL(Program Design Language) — 설계 의사 언어로 작성, HIPO(Hierarchy Input Process Output) — 모듈 계층 구조와 입출력을 도표로 표현, NS 차트(Nassi-Shneiderman Chart) — 구조적 프로그래밍을 위한 박스형 흐름도가 있습니다.

📝 핵심 요약

3강에서 배운 내용을 정리해 보겠습니다.

개념암기법방향성
응집도 7종기순절 시논우기능적(↑좋음) → 우연적(↓나쁨)
결합도 6종자스제 외공내자료(↓좋음) → 내용(↑나쁨)
팬인들어오는 화살표 수높을수록 재사용성↑
팬아웃나가는 화살표 수낮을수록 결합도↓

기출 빈출 함정: "응집도는 낮을수록 좋다" — 오답(높을수록 좋음). "결합도는 높을수록 좋다" — 오답(낮을수록 좋음). "순차적 응집도는 한 모듈의 출력이 다음 모듈의 입력이다" — 오답(모듈 간이 아닌 같은 모듈 내 요소 간입니다).

다음 강인 4강 — 객체지향 설계와 디자인 패턴에서는 SOLID 5원칙의 각 원칙이 왜 필요한지와, GoF 디자인 패턴 23종의 분류 및 기출 빈출 패턴(싱글톤·팩토리·옵서버·전략)을 완전히 정복합니다!

관련 주제

  • 응집도 7단계
  • 결합도 6단계
  • 팬인 팬아웃 계산
  • 공통 모듈 명세
  • 소프트웨어 재사용 유형
  • 모듈화 설계
  • 자격증
  • 자격증 강의
  • 정보처리기사 필기 25강 — 핵심이론·기출 완전정복
  • 무료강의
  • 무료 온라인 강의
  • NUGUNA
  • 누구나

📚 시리즈 전체 공유

정보처리기사 필기 25강 — 핵심이론·기출 완전정복

이 강의가 속한 시리즈는 총 13강, 모두 무료입니다. 처음부터 배우려는 동료에게 시리즈 전체를 알려 주세요.

댓글

0/1000

불러오는 중...