본문 바로가기

ComputerScience/Software Engineering

소프트웨어공학 - 11. Domain Models

728x90

- 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로 표현할 수 있다.)

728x90
반응형