불안정한 재료 : 기능
유스케이스
기능적 요구사항이란 시스템이 사용자에게 제공해야 하는 기능의 목록을 정리한 것
사용자가 기능을 요구하는 이유는 목적을 달성하기 위함
사용자는 목적달성을 위해 시스템과 상호작용하는 흐름을 텍스트로 정리한 것을 유스케이스라 한다
유즈케이스는 시스템의 이해관계자들 간의 계약을 행위 중심으로 파악한다. 유스케이스는 이해관계자들 중에서 일차 액터라 불리는 행위자의 요청에 대한 시스템의 응답으로서, 다양한 조건하에 있는 시스템의 행위를 서술한다.
'일차 액터(primary actor)'란 시스템의 서비스 중 하나를 요청하는 이해관계자로 하나의 목표를 가지고 유스케이스를 시작하는 액터를 의미한다.
일반적으로 시스템과 연동하는 외부 시스템 역시 일차 액터의 범주에 포함시킨다.
사용자 목표가 유스케이스의 핵심이다. 유스케이스는 공통의 사용자 목표를 통해 강하게 연관된 시나리오의 집합이다. -마틴 파울러
유스케이스의 특성
첫째, 사용자와 시스템 간의 상호작용을 보여주는 '텍스트'다
유스케이스는 다이어 그램이 아니다 다이어 그램에 노력을 쏟지 말라.
중요한 것은 유스케이스에 담겨 있는 상호작용의 흐름이다
둘째, 유스케이스는 하나의 시나리오가 아닌 여러 시나리오들의 집합이다.
예시
첫번째 시나리오 예금주가 계좌를 선택하고 당일까지의 이자액을 계산
두번째 시나리오 예금주가 계좌를 선택하고 특정 일자까지의 이자액을 계산
시나리오를 유스케이스 인스턴스(use case instance)라 한다.
셋째, 유스케이스는 단순한 피처(feature)목록과 다르다.
피처는 단순한 기능을 나열한 목록
유스케이스에서 피처는 이야기를 통해 연관된 기능들을 묶어 문맥을 만든다.
넷째, 유스케이스는 사용자 인터페이스와 관련된 세부 정보를 포함하지 말아야 한다.
즉, 자주변경되는 '어떻게 구성되냐'에 대한 정보를 배제한다.
시스템의 행위에 초점을 맞춘다.
사용자 인터페이스를 배제한 유스케이스 형식을 본질적인 유스케이스(essential use case)라한다.
다섯째, 유스케이스는 내부 설계와 관련된 정보를 포함하지 않는다.
유스케이스 목적은 연관된 시스템의 기능을 이야기 형식으로 묶는 것이지 내부 설계를 설명하는 것이 아니다.
다섯 번째는 다음 단에서 자세히 설명
유스케이스는 설계 기법도, 객체지향 기법도 아니다
유즈케이스가 단지 사용자가 바라보는 시스템의 외부 관점만을 표현한다는 점에 주목
즉, 시스템 내부 구조나 실행 메커니즘 같은 세부 정보는 제공하지 않는다.
사용자가 시스템을 통해 무엇을 얻고 어떻게 상호작용하는 지만 제공한다.
유스케이스와 객체의 구조 사이에는 커다란 간격이 존재한다. 따라서 유스케이스를 객체로 변환하는 작업은 사실상 창조에 가깝다.
유즈케이스는 객체 구조나 책임에 대한 정보가 없기 때문이다.
재료 합치기: 기능과 구조의 통합
도메인 모델, 유스케이스, 그리고 책임-주도 설계
불안정한 기능을 안정적인 구조 안에 담는다.
도메인 모델은 안정적인 구조를 개념화, 유스케이스는 불안정한 기능을 서술하기 위한 보편적 도구다.
유스케이스에 정리된 시스템의 기능(책임)을 도메인 모델을 기반으로 한 객체들의 책임으로 분배
객체지향은 모든 것을 객체로 본다. 따라서 커대한 시스템 조차 하나의 객체로 본다.
그 객체 안에 더 작은 규모의 객체가 포함될 수 있다.
출발을 장식하는 첫 번째 메시지는 시스템의 기능을 시스템의 책임으로 바꾼 후 얻어진다.
시스템에 할당된 커다란 책임은 이제 시스템 안의 작은 규모의 객체들이 수행해야 하는 더 작은 규모의 책임으로 세분화된다.
도메인 모델에 포함된 개념을 은유하는 소프트웨어 객체를 선택해야 한다.
유스케이스는 사용자에게 제공할 기능을 시스템의 책임으로 보게 함으로써 객체 간의 안정적인 구조에 책임을 분배할 수 있는 출발점을 제공한다.
책임-주도 설계는 유스케이스로부터 첫 번째 메시지와 사용자가 달성하려는 목표를, 도메인 모델로부터 기능을 수용할 수 있는 안정적인 구조를 제공받아 실제로 동작하는 객체들의 협력 공동체를 창조한다.
시스템의 기능은 역할과 책임을 수행하는 객체들의 협력 관계를 통해 구현된다.
객체 이름은 도메인 모델에 포함된 개념으로부터 차용, 책임은 도메인 모델에 정의한 개념의 정의에 부합하도록 할당한다.
유스케이스에서 출발해 객체들의 협력으로 이어지는 일련의 흐름은 객체 안에 다른 객체를 포함하는 재귀적 합성이라는 객체지향의 기본 개념을 잘 보여준다.
기능 변경을 흡수하는 안정적인 구조
도메인 구조가 안정적인 이유
사용자가 생각하는 멘탈 모델을 모델링한 것이기 때문에 패러다임이 바뀌지 않는 이상 변하지 않는다.
모델링 모델을 중심으로 객체 구조를 설계하고 유스케이스의 기능을 객체의 책임으로 분배하는 기본적인 객체지향 설계 방식의 유연함을 잘 보여 준다.
비즈니스 정책이나 규칙이 크게 변경되지 않는 한 시스템의 기능이 변경되더라도 객체 간의 관계는 일정하게 유지된다.
기능적인 요구사항이 변경될 경우 책임과 객체 간의 대응 관계만 수정될 뿐이다.
객체지향의 가장 큰 장점은 도메인을 모델링하기 위한 기법과 도메인을 프로그래밍하기 위해 사용하는 기법이 동일하다는 것이다. 따라서 도메인 모델링에서 사용한 객체와 개념을 클래스와 메서드로 쉽게 변환할 수 있다.
이 같은 특성을 연결완전성이라한다.
또한 연결완전성의 역방향 역시 성립한다.
즉, 코드의 변경으로부터 도메인 모델의 변경 사항을 유추할 수 있다.
이게 대단한 이유는 객체지향 이전의 대부분의 개발 방법은 이를 대응 할 수 없었기 때문이다.
코드로의 매끄러운 흐름을 의미하는 연결완전성과 반대로 코드에서 모델로의 매끄러운 흐름을 의미하는 것을 가역성(reversibility)이라고 한다.
도메인 모델은 문서나 다이어그램이 아니다. 도메인 모델은 사람들의 머릿속에 들어있는 공유된 멘탈 모델이다.
따라서 별도의 문서나 다이어그램을 가지고 있지 않더라도 사람들의 머릿속에 유사한 모델이 공유될 수 있다면 그것으로 충분하다.
동일한 용어와 동일한 개념을 이용해 의사소통하고 코드로부터 도메인 모델을 유추할 수 있게 하는 것이 도메인 모델의 진정한 목표다.
'IT책, 강의 > 객체지향의 사실과 오해(역할, 책임, 협력 관점에서 본 객체지향)' 카테고리의 다른 글
부록 A 추상화 기법 - 1 (0) | 2023.01.04 |
---|---|
07 함께 모으기 (0) | 2023.01.01 |
06 객체 지도 - 1 (1) | 2022.12.24 |
05 책임과 메시지 -2 (0) | 2022.12.22 |
05 책임과 메시지 -1 (0) | 2022.12.19 |