훌륭한 설계는 사용자가 만족할 수 있는 훌륭한 기능을 제공하는 동시에 예측 불가능한 요구사항 변경에 유연하게 대처할 수 있는 안정적인 구조를 제공한다.

변경을 예측하는 것이 아니라 변경을 수용할 수 있는 선택의 여지를 설계에 마련해 놓아야 한다.

여지를 남겨놓는 가장 좋은 방법은 자주 변경되는 기능이 아닌 안정적인 구조를 중심으로 설계하는 것이다.

객체를 이용해 지도(구조)를 만들어 놓으면, 기능은 지도에 표시된 길을 따라 자연스럽게 흘러간다.

 

일반적으로 기능을 수집하고 표현하기 위한 기법을 유스케이스 모델링이라고 하고

구조를 수집하고 표현하기 위한 기법을 도메인 모델링이라고 한다.

 

- 도메인 모델(도메인 모델링의 결과물)

도메인이란? 사용자가 프로그램을 사용하는 대상 분야를 말한다.

도메인 모델은 소프트웨어 개발과 관련된 이해관계자들이 도메인에 대해 생각하는 관점이다.

PC방 사장 입장에서는 PC방 도메인을 서비스, 음식을 판매하는 것으로 인식할 것이고

은행 업무에 종사하는 사람들은 은행 도메인을 고객과 계좌 사이의 돈의 흐름으로 이해할 것이다.

도메인 모델은 이해관계자들이 바라보는 멘탈 모델이다.

(* 나는 해당 도메인에 대해 떠올렸을 때, 각자가 생각하는 마음속의 '예측 결과물'이라고 생각한다)

그리고 훌륭한 디자인이란 사용자의 예상(멘탈 모델)과 가능한 정확하게 맞아 떨어지는 시스템을 만드는 것이다.

 

이전 Chapter에서 소프트웨어 객체는 현실 객체를 모방한 것이 아니라 은유를 기반으로 재창조한 것이라고 하였다.

은유를 통해 투영해야 하는 대상은 바로 사용자가 도메인에 대해 생각하는 개념들(도메인 모델, 구조)이다.

도메인 모델의 핵심은 사용자가 도메인을 바라보는 관점을 반영해 소프트웨어를 설계하고 구현하는 것이다.

사용자의 관점은 도메인의 본질을 담고 있으므로 잘 변경되지 않는다.

따라서 도메인 모델을 기반으로 소프트웨어를 설계하면 안정적인 구조를 구현할 수 있으며, 이를 기반으로 자주 변경되는 기능을 배치함으로써 기능의 변경에 대해 안정적인 소프트웨어를 구현할 수 있다.

 

 

- 유스케이스(유스케이스 모델링의 결과물)

유스케이스란?

사용자의 목표를 달성하기 위해 사용자와 시스템 간에 이뤄지는 상호작용의 흐름을 텍스트로 정리한 것을 말한다.

유스케이스의 핵심은 이야기이다.

예를 들어 '중도 해지 이자액을 계산한다' 라는 유스케이스를 보면 단지 하나의 이야기만 있을 뿐 다른 정보가 없다.

내부적으로 어떻게 이것을 설계할 것인지에 대해서는 아무 정보도 얻을 수 없다.

단지 사용자가 바라보는 시스템의 외부 관점만을 표현할 뿐이다.

(* 나는 사용자가 원하는 기능을 서술한 것 뿐이라고 생각한다)

 

 

 

정리하면,

유스케이스로부터 사용자가 원하는 기능을 인식하고, 그 기능을 도메인 모델(구조)에 맞게 구현하는 것이 유지보수하기 쉽고 유연한 객체지향 시스템을 만드는 방법이다!? 

+ Recent posts