1. 소프트웨어 모델링 개요
-
소프트웨어 모델링
- 실세계 환경을 특정 목적에 맞게 다양한 관점에서 표현하는 기법
- 복잡한 문제를 추상화(Abstraction)를 통해 간단하게 언어적으로 표현
-
모델링의 특징
- 실세계 문제에 대한 필수 사항 모델링이 요구사항 분석의 핵심
- 정의된 규칙을 사용하여 다양한 관점의 뷰(View)를 제공
- 여러 분야 엔지니어들이 공통 개념을 효과적으로 공유
- 요구사항 분석(Analysis)과 설계(Design)의 핵심
-
모델링의 필요성 (7가지)
- 복잡함 관리 / 구조 시각화 / 커뮤니케이션 / 요구사항 이해 / 개발 시스템 이해 / 솔루션 실험 / 문서화
2. 모델링의 3가지 관점
| 관점 | 설명 | UML 다이어그램 |
|---|---|---|
| 기능 모델링 | 시스템이 제공하는 기능의 관점에서 표현 | 유스케이스, 활동 다이어그램 |
| 정적/구조적 모델링 | 내부 구성 요소와 요소 간 관계 표현 (시간 개념 없음) | 클래스, 객체, 배포, 패키지 다이어그램 |
| 동적 모델링 | 구성 요소 간 상호작용 및 상태 변화 표현 | 상태머신, 활동, 통신, 시퀀스 다이어그램 |
-
기능 모델링 기법 (Functional Modeling)
- SSA(DFD, DD), SADT, PSL/PSA, OOAD(유스케이스)
-
정적/구조적 모델링 기법 (Static/Structural Modeling)
- Object Modeling, EER(Enhanced Entity Relationship) 모델
- Entity는 속성(attribute)과 동작(Operation)을 가짐
-
동적 모델링 3가지 형태 (Dynamic Modeling)
- 상태 머신 표현 / 제어 흐름 모델 / 데이터 흐름 모델
- 기법: STD(State Transition Diagram), SDL, PAT(Process Activation Table)
3. UML 개요
-
UML (Unified Modeling Language)
- 설계자·관계자가 분석, 설계, 구현 과정에서 의사소통을 위한 표준화된 모델링 언어
- OMG에서 그래디 부치(OOAD), 이바 야콥슨(OOSE), 제임스 럼바(OMT)를 연합하여 제정 (1997년 UML 1.1)
-
2015년 UML 2.5 발표
- 구조 다이어그램 7개 + 행위 다이어그램 7개 = 총 14개
| 인물 | 방법론 | 특징 |
|---|---|---|
| 그래디 부치 | OOAD (Object Oriented Analysis and Design) | 설계 중심, 시스템을 여러 뷰(View)로 분석 |
| 이바 야콥슨 | OOSE (Object Oriented Software Engineering) | 유스케이스 강조 |
| 제임스 럼바 | OMT (Object Modeling Technique) | 객체 모델 + 동적 모델 + 기능 모델의 3가지 모델 사용 |
4. UML 구조 다이어그램 (정적)
| 다이어그램 | 목적 |
|---|---|
| 클래스 (Class) | 클래스, 인터페이스, 통신 및 이들의 관계 표현 |
| 객체 (Object) | 특정 시점의 객체 상태와 객체 간 관계 표현 |
| 컴포넌트 (Component) | 컴포넌트 구조와 관계 표현 |
| 배치 (Deployment) | 실행 노드와 컴포넌트의 물리적 구성 표현 |
| 패키지 (Package) | 구성요소를 그룹화하여 패키지 구성, 패키지 간 관계 표현 |
4.1. 클래스 다이어그램
-
클래스
- 동일한 속성, 오퍼레이션, 관계, 의미를 공유하는 객체를 기술
- 객체를 캡슐화(속성 + 오퍼레이션 = 정보 은닉)
-
가시성 표현
+: public (생략 시 오퍼레이션 기본값)#: protected-: private (생략 시 속성 기본값)~: package
| 클래스 간 관계 | 표기 | 설명 |
|---|---|---|
| 의존 (Dependency) | 점선 화살표- - -> | 클래스 객체를 매개변수 또는 리턴값으로 사용 사용 후 관계 종료 |
| 연관 (Association) | 실선 화살표———> | 한 클래스가 다른 클래스의 객체 참조를 멤버변수로 보유 |
| 집합 (Aggregation) | 빈 마름모◇——— | 전체-부분 관계 부분 객체는 독립적으로 존재 가능 (외부에서 주입) |
| 복합 (Composition) | 채운 마름모◆——— | 전체-부분 관계 전체 소멸 시 부분도 소멸 (내부에서 new 생성) |
| 일반화 (Generalization) | 실선 삼각형———▷ | 상속 관계 자식이 부모의 속성·오퍼레이션 상속 |
| 실체화 (Realization) | 점선 삼각형- - -▷ | 인터페이스를 상속받아 구체적으로 구현 |
- 집합 vs 복합 구분법
- 집합은 외부에서 객체를 주입(setter),
- 복합은 내부에서
new로 직접 생성하여 생명주기를 함께 관리
4.2. 컴포넌트 다이어그램
클래스는 논리적 추상화 ↔ 컴포넌트는 물리적 요소
-
컴포넌트
- 런타임에 독립적으로 배포·실행되는 물리적 단위 (exe, jar, dll 등)
- 아키텍처 설계 시 컴포넌트-커넥터 뷰로 표현 (커넥터 = 상호작용 표현)
-
의존 관계
- 한 컴포넌트 변경 시 다른 컴포넌트에도 영향이 미침
- 점선 화살표로 표현
4.3. 배치 다이어그램
- 배치 다이어그램 (Deployment Diagram)
- 목적: 하드웨어 자원 간 연결 관계 + 소프트웨어 컴포넌트의 배치 상태 표현
- UML 2.x: 아티팩트(Artifact)를 통해 컴포넌트를 노드에 배치
| 구성 요소 | 설명 | 표기 |
|---|---|---|
| 노드 (Node) | 컴퓨터 장치 또는 실행 환경 | 직육면체 |
| 커넥션 (Connection) | 노드 간 통신 방식, 다중성 표현 | 선 |
| 아티팩트 스테레오타입 | 설명 |
|---|---|
«script» | 스크립트 파일 |
«document» | 일반 문서 |
«source» | 프로그램 소스 파일 |
«library» | 정적/동적 라이브러리 |
«executable» | 프로그램 실행 파일 |
4.4. 패키지 다이어그램
- 패키지: 클래스 등 여러 모델 요소를 그룹화하는 수단, 탭 달린 폴더로 표현
- 소프트웨어 아키텍처 모델링 시 논리적으로 분할된 모듈들을 표현
(1) 패키지 간 관계
| 스테레오타입 | 설명 |
|---|---|
«import» | Public import. 외부에서 B가 visible. 전이적(transitive) |
«access» | Private import. 외부에서 B가 not visible. 비전이적 |
«use» | A의 구현에 B가 사용됨 |
- 전이성 차이
- A
«import»B«import»C → A가 C 사용 가능 - A
«access»B«access»C → A가 C 사용 불가
- A
(2) 패키지 표준 스테레오타입
| 스테레오타입 | 의미 |
|---|---|
«framework» | 재사용 가능한 패턴으로 구성된 패키지 |
«system» | 전체 시스템을 나타내는 패키지 |
«subsystem» | 전체 시스템의 독립된 일부분 |
- 스테레오타입
- UML 기본 요소 외에 새 요소를 만들기 위한 확장 메커니즘
<< >>기호로 표현
5. UML 행위 다이어그램 (동적)
| 다이어그램 | 목적 |
|---|---|
| 유스케이스 (Usecase) | 시스템 사용 경우와 외부 행위자의 관계 구조적 표현 |
| 활동 (Activity) | 시스템 내부의 업무 수행 과정 표현 |
| 상태 (State) | 시스템의 내부 상태 전이 표현 |
| 순차 (Sequence) | 객체 간 상호작용을 시간의 흐름에 따라 표현 |
| 통신 (Communication) | 순차 다이어그램과 동일 내용을 객체 상호관계 관점에서 표현 |
5.1. 순차 다이어그램
| 구분 | 순차 다이어그램 | 통신 다이어그램 |
|---|---|---|
| 순서 표현 | 수직 방향 배치(위→아래) | 메시지에 번호 부여 |
| 강점 | 메시지 순서 파악에 효과적 | 객체 간 관계 파악에 효과적 |
| 약점 | 객체 간 관계(의존, 연관) 파악 불가 | 위치로 전송 순서 판단 불가 |
- 순차 다이어그램 (Sequence Diagram)
-
객체 간의 동적 상호작용(Dynamic Interaction)을 시간(Time)을 중심으로 모델링
-
유스케이스를 실현(Realization)한다.
-
객체 배열: 왼쪽 → 오른쪽
-
시간의 흐름: 위 → 아래 (수직)
-
| 구성 요소 | 설명 |
|---|---|
| 객체 (Object) | 메시지를 송수신하는 주체, 생명선(Lifeline, 점선)을 가짐 |
| 활성화 (Activation) | 생명선 위 작은 사각형, 오퍼레이션 실행 중임을 표시 |
| 호출(Call) 메시지 | 실선 + 꽉찬 화살표. 동기(Synchronous) 메시지 |
| 답신(Reply) 메시지 | 점선 + 열린 화살표. 이전 호출의 반환 |
| 비동기(Async) 메시지 | 실선 + 열린 화살표. 완료를 기다리지 않음 |
| 회귀 메시지 | 같은 객체 내 메서드 호출 |
| 제어 블록 | 조건문/루프를 위한 블록 |
5.2 통신 다이어그램
- 통신 다이어그램 (Communication Diagram)
- 구성 요소: 객체, 링크, 메시지
- 메시지에 번호(순서)를 부여하여 순서 표현
- 링크: 화살표 없는 실선, 양방향 연관 관계