- UP의 elaboration 단계에서 Domain Model, Design Model, SW Architecture document, Data Model, Use-case 등의 artifact들이 만들어진다.
- 이번 장에서는 Domain Model에 대해 자세히 알아보자.
1. Domain Models
- 도메인 모델을 만드는 것은 객체 지향 작업에서 가장 중요한 작업이다.
- 도메인 모델을 가지고 설계 단계에서 object, class를 디자인하게 된다.
- 반복적으로 수집한 requirement(use cases)에서 해당하는 domain을 추출해서 만든다. 한번에 전체 domain model이 만들어지는 것이 아니라 반복적 단계에서 각 영역에 해당하는 도메인 모델이 만들어져서 확장되는 것이다.
- 예를들어 마트의 POS 시스템을 설계한다고 해보자. 이렇게 시스템에서 필요한 class들을 시각적으로 표현한 모델이 바로 domain model이다.
- 즉 현실세계에서 관심 영역을 구체화 하는 작업이다. 설계 단계에서 수행하는 class를 정의하는 것이 아니다.
- 따라서 domain model에서는 실제 설계 단계에서 필요한 Database class들이 나타나서는 안된다.
- 여기서 파악한 개념적 class들과 attribute, association이 나중에 design 작업에서 class, object 도출로 이어진다. (설계 단계에서 domain model이 영감이 된다)
- 많은 경우에 domain model들로 부터 class 이름, 속성, 관계들을 따오게 된다. 이 과정을 lower representation gap이라고 한다. (domain에서 domain layer도출)
- 도메인 모델은 보통 UP의 elaboration 단계에서 많이 만들어진다. 이때 만든 domain model을 가지고 design 단계에서 class가 도출된다.
2. Conceptual class 찾기
- 파악한 기능별로 자주 등장하는 이름들을 정리하는 방법이다. 이렇게 찾은 이름들이 class 후보가 된다.
- 혹은 use case에서 반복적으로 많이 등장하는 명사들을 추려서 class후보를 만드는 방법도 있다.
- 다양한 방법을 통해 위와 같은 conceptual class들을 도출할 수 있다.
- 물론 conceptual class들을 도출하는 과정에서 비슷한 의미를 나타내는 class들이 존재해서 중복의 문제를 야기할수도 있다.
- 혹은 독립된 class로 나타내지 않고 다른 class의 속성으로 나타내야 하는가?의 고민도 빈번할 수 있다. 위의 경우는 목적지를 airport라는 독립된 class로 분리하고 관계를 맺는 것이 타당해 보인다.
- 이런 경우는 description이 독립된 클래스로 존재하는 것이 타당해보인다. 왜냐하면 item이 사라졌을 때 상품의 정보도 완전히 소멸되기 때문이다. 좌측 표현의 경우 "상품이 매진되었습니다" 라는 정보를 나타낼 수 없다.
3. Association
- 클래스 사이의 의미 있는 관계를 표현한다.
- 구현할 기능에 따라 맺어지는 클래스 간의 여러 관계들을 우측 그림처럼 나타낼 수 있다.
- domain model에서의 association이 전부다 software 공간에서 구현이 되는 것은 아니다.
- domain model에서 association은 문제 상황의 domain을 잘 이해하기 위함이지 반드시 구현이 되어야 하는 내용은 아니다.
- 클래스 간의 association은 여러개일 수 있고 다대다, 다대1등의 관계를 맺을 수 있다.
4. Attribute
- 클래스의 부가적인 정보(속성)를 담는 곳이다.
- Store라는 class가 있다면 attribute로 name, address가 있을 수 있다.
- attribute의 visibility(private, public, protected), data type(int, string)등을 나타낼수도 있다. 뿐만 아니라 default value를 설정할 수도 있다.
- const같은 조건도 붙일 수 있다 (읽기만 가능, 수정불가 등등 제약 사항)
- sale 클래스의 total 속성은 계산을 통해 값이 결정된다 이 같은 속성을 / 기호를 붙여서 표현할 수 있다. (도출되는 속성을 나타냄, 예를 들면 생일이라는 속성으로부터 나이가 도출되기 때문에 /age로 표현할 수 있다.)
'ComputerScience > Software Engineering' 카테고리의 다른 글
소프트웨어공학 - 13. Logical Architecture (0) | 2022.04.28 |
---|---|
소프트웨어공학 - 12. Sequence Diagram -> Operation Contract (0) | 2022.04.14 |
소프트웨어공학 - 10. UML Sequence diagram (0) | 2022.04.07 |
소프트웨어공학 - 9. Class diagram -> Code Generation (0) | 2022.04.06 |
소프트웨어공학 - 8. UML Class diagram (0) | 2022.03.31 |