7. Modeling - 1

모델이란?

Model = 현실의 단순화. 실제로 만들고자 하는 것의 샘플로도 이해할 수 있다. 모델하우스나 물리 모델과 같은 것을 생각해보자.

소프트웨어 시스템에 대한 모델은 무엇일까? 단계에 따라서 나눌 수 있다.

Untitled

  • 분석단계 → 사용자가 원하는 것(functional requirments)을 표현하는 것
  • 설계단계 → 내부 구조에서 인풋 아웃풋 어떻게 연결할지 표현하는 것.

시스템 요소들을 정의한다는 공통점이 있다.

그러나 소프트웨어 개발 방법론에 따라서 이 시스템 요소라는 것의 의미가 달라진다.

  • 구조적 방법론 → 시스템 요소 = Function
  • 객체지향 방법론 → 시스템 요소 = Class / Object

아래서는 각 방법론 마다 어떤 방식으로 모델링을 진행하는지 알아보자.


구조적 방법론(Structured Method)

구조적 프로그래밍이라고도 한다. 아래의 기본적인 요소들을 복합적으로 구성하여 프로그램을 작성한다.

  • Sequence → a; b; c;처럼 나열.
  • Selection → if-else
  • Iteration → for, while

지금 보면 정말로 기본적이고 당연한 이야기지만, 소프트웨어 발전의 초창기에는 goto문을 남용하여 스파게티 코드가 넘쳐났기에 등장한 방법이다. Edsger W. Dijkstra 선생님께서 구조적 프로그래밍을 제창하시고 goto문을 해악으로 규정하셨다.

*스파게티 코드 = 코드가 복잡하게 얽혀있어서, 코드를 읽으면서도 작동을 파악하기 어려운 코드.

DFD(Data Flow Diagram)

구조적 프로그래밍의 3가지 특징인 순차, 분기, 반복을 어떻게 모델링에서 표현할 수 있을지 고민하다가 만들어진 것이 DFD이다. DFD는 4가지 요소로 구성된다.

Untitled

  • 프로세스 - 원, 타원 형태로 표시
  • 데이터 흐름 - 화살표로 표시
  • 데이터 저장소 - 평행선으로 표시(ex: 위 이미지의 discount file)
  • 외부 엔티티 - 사각형으로 표시. 보통 시작과 종료를 의미.

가운데 함수를 두고 입출력을 나타낸다고 생각하면 좋다.

Data Dictionary

Data dictionary는 일종의 기술문서이다. DFD에서는 입출력을 단순하게 Order, Invoice 등으로 표시했지만, 자세히 들여다보면 이들 또한 데이터의 집합이다. 이런 세부 사항들을 표시한 문서가 Data dictionary인 것이다.

Untitled

Data dictionary의 작성법은 아래와 같다.

  • + 표시는 구조체 처럼 사용된다. 하나로 묶는 역할이다.
  • { } 표시는 반복되는 데이터 타입 묶음을 의미한다.
  • [ | ] 표시는 여러 타입 중 하나를 선택하라는 의미이다

위의 Order 표를 예로 들어보자.

  • name, category, class는 단 한번만 사용되는 개별 요소이다.(+연결)
  • Items는 no, stock number, quantity, unit price를 묶은 것이다.

Untitled

이와 같이 표현 가능하다.


객체지향 방법론(Object-Oriented Method)

객체지향 프로그래밍(OOP)이라고도 불린다. 여기서 객체 = 함수 + data이다. 캡슐화, 상속, 다형성등의 특징을 가지고 객체간 상호작용으로 시스템을 표현한다. 세부적인 내용까지 여기서 다루지는 않겠다.

구조적 방법론에서 모델링 방법으로 DFD를 사용했다면, 객체지향 방법론에서는 UML(Unified Modeling Language)를 사용한다. 많은 종류의 다이어그램을 포함하고 있기에, 다음 글에서 다루도록 하겠다.

참고자료

  • 소프트웨어 공학의 모든 것(최은만, 생능출판사, 2020)