Skip to content
난이도 문제은행 5

모듈화와 설계 개념 ​

큰 프로그램을 한 덩어리로 만들면 한 곳을 고칠 때 전체가 흔들린다. 그래서 설계는 기능을 작은 단위로 나누고, 그 단위가 서로를 얼마나 모르게 할지 정하는 데서 시작한다. 이 문서는 그 바탕이 되는 개념인 모듈화(modularity)·추상화(abstraction)·정보 은닉(information hiding)·협약에 의한 설계(design by contract)와, 구조도(structure chart)에서 계산하는 팬인(fan-in)·팬아웃(fan-out)을 다룬다. 시험에서는 정의를 주고 용어를 쓰게 하거나, 구조도를 주고 팬인·팬아웃을 세게 한다.

모듈과 모듈화 ​

모듈(module)은 시스템을 나눈 한 조각의 기능 단위다. 서브루틴·서브시스템·프로그램·작업 단위가 모두 모듈이 될 수 있다. 모듈화는 시스템을 이런 모듈 단위로 나누는 일이다. 나누는 이유는 수정·재사용·유지보수를 쉽게 하기 위해서다. 모듈이 작고 역할이 분명하면 고칠 곳을 찾기 쉽고, 다른 곳에 가져다 쓰기도 쉽다.

모듈을 잘 나눴는지는 모듈 독립성으로 판단한다. 독립성은 두 잣대로 잰다. 모듈 사이가 얼마나 얽혔는지를 보는 결합도(coupling)는 낮을수록, 모듈 안의 요소가 얼마나 한 목적으로 모였는지를 보는 응집도(cohesion)는 높을수록 좋다. 두 잣대의 세부 등급은 결합도와 응집도에서 다룬다.

추상화 ​

추상화는 문제의 큰 흐름과 핵심만 먼저 설계하고, 세부는 나중에 차례로 구체화하는 사고방식이다. 처음부터 모든 세부를 다루면 전체 그림을 놓치기 때문에 필요하다. 국내 시험은 무엇을 감추느냐에 따라 아래 세 가지로 나눈다. 영문 위키백과는 제어 추상화와 자료 추상화를 중심으로 설명하므로, 이 세 갈래는 시험식 분류로 외운다.

유형감추는 것예
과정 추상화수행 절차의 세부"정렬한다"만 정하고 알고리즘은 나중에
자료 추상화데이터의 내부 구조"목록"으로만 다루고 배열·연결 리스트는 숨김
제어 추상화제어 흐름의 세부for문 하나로 비교·점프 명령을 대신

정보 은닉 ​

정보 은닉은 모듈 안의 절차와 자료를 감춰 다른 모듈이 직접 보거나 바꾸지 못하게 하는 원칙이다. 파나스(David Parnas)가 1972년 논문에서 모듈을 나누는 기준으로 제시했다. 그의 제안은 처리 단계대로 자르지 말고, 바뀌기 쉬운 설계 결정을 모듈마다 하나씩 맡겨 숨기라는 것이었다. 감춰 두면 한 모듈의 내부가 바뀌어도 바깥은 공개된 인터페이스(interface)만 쓰므로 영향이 번지지 않는다. 그래서 수정·시험·유지보수가 쉬워진다. 객체지향의 캡슐화(encapsulation)는 이 원칙을 언어 차원에서 구현한 것이다.

협약에 의한 설계 ​

협약에 의한 설계는 메이어(Bertrand Meyer)가 Eiffel 언어와 함께 제안한 방법이다. 컴포넌트를 부르는 쪽과 제공하는 쪽이 지킬 조건을 계약서처럼 명세해 두어, 서로 무엇을 믿어도 되는지 분명히 한다. 명세에 들어가는 조건은 세 가지다.

조건언제 참이어야 하나
선행 조건(precondition)연산을 호출하기 전
결과 조건(postcondition)연산이 끝난 뒤
불변 조건(invariant)연산이 실행되는 동안 늘

불변 조건의 뜻은 시험 정의다. 메이어의 원래 정의에서 클래스 불변 조건은 공개 연산을 부르기 전과 끝난 뒤에 참이어야 하고, 연산 내부에서는 잠시 깨졌다가 끝나기 전에 회복돼도 된다.

팬인과 팬아웃 ​

구조도에서 모듈 사이의 호출 관계를 세는 지표다. 팬인은 나를 부르는 상위 모듈 수, 팬아웃은 내가 부르는 하위 모듈 수다. 팬인이 높으면 재사용이 잘 된다는 뜻이지만 고장 시 여러 곳이 멈추므로 꼼꼼히 시험한다.

예로 A는 B와 C를 부르고, B는 D와 E를, C는 E를 부르며, D와 E는 각각 F를 부르는 구조를 보자. E는 B와 C가 부르므로 팬인 2, F는 D와 E가 부르므로 팬인 2다. A와 B는 각각 둘을 부르므로 팬아웃 2다. 화살표가 들어오는 수와 나가는 수를 따로 세면 된다.

시험 포인트 ​

  • "시스템의 기능을 모듈 단위로 나누는 것" → 모듈화. 목표는 결합도 최소화·응집도 최대화.
  • "모듈 내부 절차와 자료를 감춰 다른 모듈이 접근하지 못하게 한다" → 정보 은닉.
  • "전체적 개념을 먼저 설계하고 차례로 구체화한다" → 추상화(과정·자료·제어).
  • 협약에 의한 설계의 세 조건 → 선행 조건·결과 조건·불변 조건.
  • 팬인 = 들어오는 호출 수(나를 제어하는 모듈 수), 팬아웃 = 나가는 호출 수. 뒤바꾸는 실수가 가장 흔하다.

관련 문서