- 기능 설계 : 제품이 사용자를 위해 무엇을 할 수 있는지에 초점을 맞춤
- 구조 설계 : 제품의 형태가 어떠해야 하는지에 초점을 맞춤
- 기능 설계 위주로 하게 되면 어떤 하나의 기능이 다른 기능을 참조하게 되면서 엮이게 되고 하나의 큰 덩어리를 이루게 된다. 이때 기능이 변경될 경우 소프트웨어 전체에 영향을 미치게 되기 때문
- 자주 변경되지 않는 안정적인 객체 구조를 기반으로 시스템 기능을 객체 간의 책임으로 분배함
- 객체지향은 객체의 구조에 집중하고 기능이 객체의 구조를 따르게 함
- 시스템 기능은 더 작은 책임으로 분할되고 적절한 객체들에게 분배되기 때문에 기능이 변경하더라도 객체 간의 구조는 그대로 유지됨
- 구조 : 구조는 사용자나 이해관계자들이 도메인에 관해 생각하는 개념과 개념들 간의 관계로 표현
- 기능 : 사용자의 목표를 만족시키기 위해 책임을 수행하는 시스템의 행위로 표현
- 도메인 : 사용자가 프로그램을 사용하는 대상 분야
- 도메인 모델 : 사용자가 프로그램을 사용하는 대상 영역에 관한 지식을 선택적으로 단순화하고 의식적으로 구조화한 형태
- 예를 들어 은행 업무에 종사하는 살마들은 은행 도메인을 고객과 계좌 사이의 돈의 흐름으로 이해할 것이다
- 멘탈 모델(도메인 모델)
- 사람들이 자기 자신, 다른 사람, 환경, 자신이 상호작용하는 사물들에 대해 갖는 모형
- 사용자 모델, 디자인 모델, 시스템 이미지로 구분
- 사용자 모델 : 사용자가 자기 제품에 대해 가지고 있는 개념들의 모습
- 디자인 모델 : 설계자가 마음 속에 갖고 있는 시스템
- 시스템 이미지 : 최종 제품
- 도메인 모델의 3가지 측면을 모두 모델링 할 수 있는 유사한 모델링 패러다임을 사용할수록 소프트웨어 개발이 쉬워짐
- 객체지향은 이런 요구사항을 가장 범용적으로 만족시킬 수 있는 모델링 패러다임
- 소프트웨어 객체는 현실 객체가 갖지 못한 특성을 가질수도 있고 현실 객체가 하지 못하는 행동을 할수도 있다.
- 핵심은 은유를 통해 현실 객체와 소프트웨어 객체 사이의 차이를 최대한 줄이는 것
- 표현적 차이가 중요한 이유는 소프트웨어를 이해하고 수정하기 쉽게 만들어줌
- 도메인 모델로 제공하면 상대적으로 안정적임
- 유스케이스 - 기능적 요구사항 : 시스템이 사용자에게 제공해야 하는 기능의 목록을 정리한 것
- 유스케이스 : 사용자의 목표를 달성하기 위해 사용자와 시스템 간에 이뤄지는 상호작용의 흐름을 텍스트로 정리한 것
- 유스케이스는 사용자와 시스템간의 상호작용을 보여주는 '텍스트'
- 유스케이스는 하나의 시나리오가 아니라 여러 시나리오들의 집합
- 유스케이스는 단순한 피처 목록과 다르다. 피처는 시스템이 수행해야하는 기능의 목록을 단순하게 나열한 것이다.
- 유스케이스가 단순히 기능을 나열하는 것이 아니라 이야기를 통해 연관된 기능들을 함께 묶을 수 있다는 점
- 유스케이스는 사용자 인터페이스와 관련된 세부 정보를 포함하지 말아야 함
- 유스케이스는 내부 설계와 관련된 정보를 포함하지 않음
- 유스케이스에는 단지 사용자가 시스템을 통해 무엇을 얻을 수 있고 어떻게 상호작용할 수 있느냐에 관한 정보만 기술됨
- 도메인 모델은 안정적인 구조를 개념화하기 위해, 유스케이스는 불안정한 기능을 서술하기 위해 가장 일반적으로 사용하는 도구
- 유스케이스에 정리된 시스템의 기능을 도메인 모델을 기반으로 한 객체들의 책임으로 분배해야됨
- 책임 할당의 기본 원칙은 책임을 수행하는데 필요한 정보를 가진 객체에게 그 책임을 할당하는 것
- 비즈니스가 없어지거나 완전히 개편되지 않는 한 안정적으로 유지됨
- 예를 들어 정기예금 도메인에서 정기예금, 계좌, 이자율, 이자란 개념은 쉽게 변하지 않음
- 도메인 모델을 구성하는 개념 간의 관게는 비즈니스 규칙을 기반으로 하기 때문에 비즈니스 정책이 크게 변경되지 않는 한 안정적으로 유지됨