Key Takeaway Points
- 도메인 모델링은 개발팀이 어플리케이션 도메인을 이해하는 데 도움을 주기 위한 개념화 과정이다.
- 도메인 모델링은 5가지 단계로 이루어진다.
1. 어플리케이션 도메인에 대한 정보 수집
- 브레인스토밍
- 브레인스토밍 결과 분류
- UML 클래스 다이어그램을 사용해 도메인 모델 시각화
- 도메인 모델에 대한 검사 및 검토 수행
도메인 모델링은 개념화 과정이다. 중요한 도메인 개념, 속성 및 개념 간 관계를 식별하는 것을 목표로 한다. 결과는 도메인 모델이라고 하는 다이어그램으로 묘사한다. 개념화 과정에는 관찰, 분류, 추상화, 일반화 등이 포함된다.
소프트웨어 엔지니어들은 서로 다른 배경과 경험을 가져 어플리케이션에 대한 인식도 다르다.
개발자는 어플리케이션의 특정 인스턴스를 관찰하고, 도메인 모델이라 불리는 개념적 모델을 생성하기 위해 관찰한 인스턴스를 분류하고, 추상화하고, 일반화한다.
attribute | object | |
---|---|---|
independent existence | X | O |
생성 방법 | 입력 장치에서 데이터 입력 | 입력이 아닌 생성자 호출 |
비고 | 개체를 설명하고 특성화함 |
association은 하나 이상의 클래스 간 관계이다. 한 클래스의 객체가 다른 클래스의 객체와 연관될 수 있다고 명시한다.
ex. 은행 시스템에서 고객은 계정을 소유한다. → 고객 클래스와 계정 클래스는 연관 관계이다.
aggregation은 두 클래스 간 이진 관계이다. 한 클래스의 개체는 다른 클래스의 개체의 일부임을 나타낸다.
ex. 책은 챕터로 구성되어있고, 챕터는 섹션으로 구성된다.
ex. 엔진은 자동차의 일부이다.
inheritance는 두 개념 또는 클래스 간 이진 관계로, 하나의 개념 또는 클래스는 다른 하나의 일반화(또는 전문화)이다.
ex. Account의 일반화/전문화
polymorphism은 한 가지가 다른 형태를 취할 수 있다는 것을 의미한다. 공통 인터페이스를 사용해 Saving Account, Checking Account 같은 다양한 유형의 계좌를 처리할 수 있고, 특정 계좌 유형에 상관없이 자금 예금/인출 같은 작업을 수행할 수 있다.
inheritance과 polymorphism은 비슷해보이지만 다르다.
inheritance는 클래스 간 계층 구조를 정의하고, 코드의 재사용을 촉진한다.
polymorphism은 객체가 여러 다른 형태를 가질 수 있음을 나타내고, 같은 인터페이스를 통해 다양한 객체를 처리할 수 있도록 한다.
만약 학생이 여러 개의 강좌를 등록한다면, 각 강좌에 대한 성적이 나온다. 성적이 학생 클래스의 속성이라면, 한 학생이 여러 개의 강좌를 등록하는 것이 가능하기 때문에 학생 클래스는 여러 개의 성적 속성을 가져야 한다. 어떻게 모두 다른 강좌의 성적 속성을 차별화할 수 있을까? association class를 활용해 이를 해결할 수 있다.
association class는 association 인스턴스에 대한 속성과 동작을 정의하는 특수 클래스다.
학생과 강좌 사이의 등록 연관성을 위해 등록이라고 하는 연관 클래스를 정의한다. 등록에는 성적 및 학기 속성을 포함한다. 학생이 강좌를 3개 등록한다면, 인스턴스가 3개 생성된다.
모든 팀원들은 브레인스토밍과 분류를 개별적으로 하지 않고, 팀으로 수행해야 한다. 그래야 공통된 이해를 구축할 수 있다.
고객/사용자와 협력해서 어플리케이션 및 도메인을 이해한다.
요구사항을 이해하는 것은 어플리케이션과 도메인을 얼마나 이해하는지에 달려있다.
팀이 어플리케이션 도메인을 이해해야 하는 경우에만 도메인 모델링을 수행한다. 도메인 모델링은 단순하게 유지하고 점진적으로 확장한다.
도메인 모델링은 actor-system interaction modeling, object interaction modeling, object state modeling, and/or activity modeling과 동시에 수행될 수 있다.
모델링 시, 모든 도메인 지식을 다 알려고 하는 것은 시간이 너무 많이 걸릴뿐더러 후속 단계에서 누락된 부분을 발견할 수 있기 때문에 불필요하다. 이는 모델링 프로세스가 역추적을 포함하는 반복적 프로세스임을 의미한다.