설계 수준·추상화·분해·모듈화와 구조적 표현
상·하위 설계와 추상화·분해·정보 은닉·모듈화 원리를 구조적 표현과 함께 익힌다.
설계 수준
소프트웨어 설계는 요구사항을 구현 가능한 구조로 바꾸는 활동이다. 문서 이름보다 결정의 범위와 상세도로 수준을 구분한다.
| 구분 | 주요 결정 |
|---|---|
| 상위 설계 | 시스템 구조, 서브시스템, 외부 인터페이스, 데이터 흐름, 주요 컴포넌트 |
| 하위 설계 | 모듈·클래스 내부 구조, 자료 구조, 알고리즘, 세부 인터페이스 |
상위 설계는 “무엇을 어떤 큰 단위로 나눌 것인가”, 하위 설계는 “각 단위를 어떻게 구현할 것인가”에 가깝다. 두 수준은 완전히 분리되지 않고 상세 설계에서 발견된 제약이 상위 구조를 수정하게 할 수 있다.
복잡성을 줄이는 원리
추상화
불필요한 세부를 감추고 현재 문제에 필요한 본질만 표현한다.
- 기능 추상화: 수행할 기능의 이름과 결과에 집중
- 데이터 추상화: 데이터와 허용 연산을 하나의 개념으로 표현
- 제어 추상화: 복잡한 제어 흐름을 의미 있는 단위로 표현
단계적 분해와 정제
큰 기능을 하위 기능으로 나누고 각 기능을 점차 상세화한다. 분해 기준은 단순한 코드 길이보다 책임·변경 이유·데이터와 기능의 관련성이다.
정보 은닉
다른 모듈이 알 필요가 없는 내부 자료 구조·알고리즘·변경 가능 결정을 감춘다. 외부는 안정된 인터페이스를 통해서만 사용한다.
모듈화

추상화와 모듈화 구조도
시스템을 독립적인 책임 단위로 나누는 것이다. 좋은 모듈은:
- 하나의 분명한 책임을 가진다.
- 외부에 필요한 인터페이스만 공개한다.
- 내부 변경이 다른 모듈에 적게 퍼진다.
- 입력·출력·오류·제약이 명확하다.
- 시험과 재사용이 가능하다.
무조건 작게 나누는 것이 목표는 아니다. 너무 잘게 분리하면 호출 관계와 관리 비용이 증가한다.
하향식과 상향식 설계
| 방식 | 출발점 | 특징 |
|---|---|---|
| 하향식 | 전체 기능 | 상위 기능을 하위 기능으로 단계적으로 분해 |
| 상향식 | 재사용 가능한 하위 요소 | 기존 모듈을 조합하여 상위 시스템 구성 |
실제 설계에서는 전체 구조를 잡는 하향식 접근과 재사용 요소를 활용하는 상향식 접근을 함께 사용할 수 있다.
구조적 설계와 표현
구조적 설계는 시스템을 기능 중심의 모듈로 분해하고 모듈 간 호출·자료 전달 관계를 명확히 한다.
구조도(Structure Chart)
모듈의 계층과 호출 관계, 전달되는 자료·제어 정보를 나타낸다. DFD가 데이터의 흐름과 변환을 표현하는 분석 도구라면 구조도는 프로그램 모듈 구조에 더 가깝다.
N-S 차트
N-S 차트(Nassi-Shneiderman Chart)는 한 절차 내부의 구조적 제어 논리를 상자 중첩으로 표현한다.
- 순차
- 선택(if/else)
- 반복(while 등)
화살표 중심의 순서도와 달리 구조적 제어 블록을 명확히 보여 주며 임의의 흐름 이동을 줄인다. 시스템 전체 모듈 관계나 데이터 흐름을 표현하는 도구는 아니다.
표현 도구 비교
| 도구 | 중심 표현 |
|---|---|
| DFD | 데이터의 이동과 변환 |
| 구조도 | 모듈 계층·호출·자료 전달 |
| N-S 차트 | 모듈 내부의 순차·선택·반복 |
| UML 클래스 다이어그램 | 클래스와 정적 관계 |
| UML 시퀀스 다이어그램 | 객체 간 시간 순 메시지 |
| 의사코드 | 구현 언어에 독립적인 처리 절차 |