Contents
- Overview of OOD
- Logical Architecture
- Designing Objects
Overview of OOD
OOA to OOD Iteratively
Analysis : Do the right thing
- 요구사항/OOA에서는 시스템이 "올바른 일을 수행하는 것(What)"에 중점을 둠
Design : Do the thing right
- 설계 작업에서는 "그 일이 올바르게 동작하도록(How)"하는데 중점을 둠
Transition from OOA to OOD iteratively
- UP에서 각 iteration마다, 요구사항/OOA에서 설계/구현으로의 전환이 일어남
- 반복적이면서 점진적으로 분석 및 설계를 수정해서 개선해 나감
OOA <--> OOD
Logical Architecture
Logical Architecture
논리적 아키텍처
- 소프트웨어 클래스들을 package, subsystem, layer와 같은 큰 단위로 구성한 것
실제 어떻게 배치(deploy)할 것인가는 결정하지 않고 논리적인 수준에서 구조를 고민.
- Package diagram으로 논리적 아키텍처를 시각화할 수 있음
계층을 이용한 설계
계층(Layer)
- 응집된 책임을 가지며 클래스, 패키지 또는 서브시스템을 그룹화 한 것
기본 아이디어
- 큰 규모의 시스템을 계층들로 조직화하고 각 계층은 연관된 책임을 가짐
응집력을 갖도록 관심 영역을 분리
- 더 높은 계층이 더 낮은 계층의 서비스를 호출할 수 있도록 계층들이 구성됨
장점
- 관심 분리, 하위 수준과 상위 수준의 서비스 분리 => 재사용성 증가
- 일부 계층만 새로운 구현으로 대체할 수 있음 => 모듈성 증가
- 팀 단위 분할 개발이 용이해짐
Typical Layers in OO system
OO System에서 일반적인 계층
- 사용자 인터페이스 계층 (최상위, presentation 계층 이라고도 함)
actor와의 입출력을 담당
- 응용 로직과 도메인 계층 (domain 계층)
요구사항을 충족하는 도메인 개념을 나타내는 소프트웨어 객체
- 기술적 서비스 계층 (technical service 계층)
범용 객체, 데이터베이스 연결, 오류의 로깅 서비스와 같이 기술적 서비스를 제공하는 객체나 서브시스템

우리는 도메인 계층에 집중하여 볼 것임.
Package Diagram
패키지 다이어그램
- 어떤 구성요소라도 그룹으로 조직화되면 시각화할 수 있음
Notatoins

- Tier = Logical layer
- Vertical Layers
- Horizontal Partition
한 계층 내에서 병렬적인 서브시스템/패키지를 수평으로 표현
- Dependency (의존 관계)
패키지(A)에서 다른 패키지(B)에 있는 요소를 사용하면 A는 B를 의존한다고 함.
표기는 패키지 A에서 B로 점선 화살표로 표기
SSD와 System Operations의 연관
Layered logical architecture와의 연관성
- UI 계층의 객체는 UI 계층에서 도메인 계층으로 요청을 전달 / 위임 (System operation)
- UI 계층에서 도메인 계층으로 보내는 메시지는 SSD에 나타난 메시지와 동일
패키지 다이어그램 가이드라인
도메인 계층의 클래스 이름은 도메인 모델에서 따온다
도메인 모델 내에서는 하나의 개념이지만, 설계 모델에서는 소프트웨어 클래스이다. 이 둘은 다르지만, 소프트웨어 클래스는 도메인 모델에서 영감을 얻는다.
논리적 모델과 물리적 모델을 섞어 그리지 않는다
- 실제로 어떤 DB를 사용하는지(물리) 고려하지 않는다.
모델-뷰 분리 원칙 (Model-view Separation)
- 모델은 도메인 게층의 객체를 의미
- 모델(도메인) 객체는 뷰(UI) 객체에 대한 직접적인 지식을 가져선 안됨
모델-뷰 분리 이유
- 유지보수
UI는 자주 변하나 도메인/데이터는 상대적으로 덜 변함.
- 관심의 분리
UI 개발은 사용자 관점에서 편의성을 최대화 하는데 초점
- 싱글 모델-멀티 뷰
하나의 데이터로 여러 가지 다른 모습으로 사용자에게 보여주는 상황이 많음
모델과 뷰를 분리하면 모델은 변경하지 않고 뷰만 변경하면 됨
Designing Objects
Object model의 종류
-
Static model(정적 모델)은 패키지, 클래스 이름, 속성, 오퍼레이션 등의 정의를 설계하는데 도움이 됨
-
Dynamic model(동적 모델)은 로직, 코드, 메소드 등을 설계하는데 도움이 됨
-
반복적으로 수행해서 개선해 나감
Static and Dynamic object modeling
- 가장 흔하게 사용되는 정적 객체 모델링 방법은 class diagram임
- 동적 객체 모델리을 통해, 실제로 어떤 객체가 어떻게 상호작용하는지에 대한 정확한 세부 정보 파악
- Class diagram, Package diagram, Deployment diagram
- Interaction diagram (sequence diagram)
- State diagram
- Activity diagram
Recap.
Design : Do the thing right
- 설계 작업에서는 "그 일이 올바르게 동작하도록" 하는데 중점을 둠
논리적 아키텍처
- 소프트웨어 클래스들을 package, subsystem, layer와 같은 큰 단위로 구성한 것 (in a static view)
Package Diagram
- 그룹(package)으로 조직화 된 논리적 아키텍처를 시각화 하는데 사용
Designing Objects
- Static model : 패키지, 클래스 이름, 속성, 오퍼레이션 등의 정의를 설계
- Dynamic model : 로직, 코드, 메소드 등을 설계