사람들의 요구사항은 계속 변하기 때문에 모델이 제공해야 하는 기능 역시 이에 다라 지속적으로 변할 수 밖에 없다. 


1. 기능을 중심으로 구조를 종속시키는 접근법

- 범용적이지 않고 재사용이 불가능하면 변경에 취약한 모델을 낳게 된다. 

ex) 사람들에게 길을 묻는 접근법


2. 구조를 중심으로 기능을 종속시키는 접근법

- 범용적이고 재사용 가능하면 변경에 유연하게 대처할 수 있는 모델을 만든다. 

ex) 지도



자주 변경되는 기능이 아니라 안정적인 구조를 따라 역할,책임,협력을 구성하는 것이 이번장의 주제




기능 설계 대 구조 설계

   

기능설계 (function) : 제품이 사용자를 위해 무엇을 할 수 있는지 초점을 맞춘다.

구조설계(structure) : 제품의 형태가 어떠해야 하는지에 초점을 맞춘다.



- 요구사항은 예측 불가능하게 변경된다.    

  훌륭한 설계자는 훌륭한 기능을 제공하는 동시에, 불가능한 요구사항 변경에 유연하게 대처할수 있는 능력

  

미래에 구체적으로 어떤 변경이 발생할 것인지 예측하지 않고

단지 언젠가는 변경이 발생할 것이며 아직까지는 그것이 무엇인지 모른다는 사실을 겸허하게 받아들여라


즉. 좋은 설계는 나중에라도 변경할 수 있는 여지를 남겨 놓는 설계다.

자주 변경되는 기능이 아닌 안정적인 구조를 중심으로 설계하는 것




두 가지 재료: 기능과 구조

기능과 구조를 표현하기 위해 일관되게 적용할 수 있는 두가지 기법

1. 구조는 사용자나 이해관계자들이 도메인(domain)에 관해 생각하는 개념과 개념들 간의 관계로 표현한다.

2. 기능은 사용자의 목표를 만족시키기 위해 책임을 수행하는 시스템의 행위로 표현한다.


기능을 수집하고 표현하기 위한 기법을 유스케이스 모델링

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



안정적인 재료 : 구조

도메인 모델

- 사용자가 프로그램을 사용하는 대상 영역에 관한 지식을 선택적으로 단순화하고 의식적으로 구조화한 형태

- 소프트웨어가 목적하는 영역 내의 개념과 개념과의 관계, 다양한 규칙이나 제약 등을 주의깊게 추상화한것.


소프트웨어의 도메인이 무엇이건 상관없이 , 관련된 사람들이 도메인을 바라보는 모델이 존재한다.

ex) 은행원 : 고객과 계좌 사이의 돈의 흐름으로 이해 

중고차딜러 : 구매되는 자동차가 판매되는 자동차의 교환으로 이해

게이머 : 캐릭터와 몹, 몹이 떨구는 아이템간의 관계로 이해     

프로그래머 : 입력과 출력하는 함수 등등


- 이해관계자들이 바라보는 멘탈 모델 (Mental Model)

멘탈모델이란? 사람들이 자기 자신, 다른 사람, 환경, 자신이 상호작용하는 사물들에 갖는 모형

사람들은 세상에 존재하는 현상을 이해하고 현상에 반응하기 위해 자신의 마음속에 멘탈모델을 구축하고,

소프트웨어 사용자들도 도메인에 존재하는 현상을 이해하고 현상에 반응하기 위해 도메인과 관련된 멘탈 모델을 형성한다.


멘탈모델의 3가지 측면

1. 사용자 모델 : 사용자가 제품에 대해 가지고 있는 개념들의 모습

2. 디자인 모델 : 설계자가 마음 속에 갖고 있는 시스템에 대한 개념화

3. 시스템 이미지 : 최종 제품


도메인 모델은 도메인에 대한 사용자모델, 디자인모델, 시스템이미지를 포관하도록  추상화한 소프트웨어 모델이다. 

따라서 도메인 모델은 소프트웨어에 대한 멘탈모델이다. 


도메인의 모습을 담을 수 있는 객체지향


도메인 모델이란

사용자들이 도메인을 바라보는 관점

설계자가 시스템의 구조를 바라보면 관점

소프트웨어 안에 구현된 코드의 모습 그 자체


객체지향을 사용하면 사용자들이 이해하고 있는 도메인의 구조와 최대한 유사하게 코드를 구조화 할수 있다. 



표현적 차이

- 소프트웨어 객체와 현실 객체 사이의 관계를 가장 효과적으로 표현할 수 있는 단어는 은유이다.


- 소프트웨어객체가 현실 객체를 왜국한다고 해도 소프트웨어 객체는 현실객체의 특성을 토대로 구축한다. 

  이처럼 소프트웨어 객체와 현실객체 사이의 의미적 거리를 가리켜 표현적 차이 또는 의미적 차이라 한다. 


- 핵심은 은유를 통해 소프트웨어 객체와 현실 객체 사이의 차이를 최대한 줄이는것


- 그러나 대부분의 소프트웨어 도메인은 현실에 존재하는 않는 가상의 세계를 대상으로 하기때문에 ( 마법사와 몹들 같이..)

  그러므로 가상의 세계를 창조하는 작업에서 현실 객체를 은유할 수 없다. 


- 은유를 통해 투영해야 하는 대상은 사용자가 도메인에 대해 생각하는 개념들이다. 


- 따라서 소프트웨어 객체는 그 대상이 현실적인지 아닌지에 상관없이 도메인 모델을 통해 표현되는 도메인 객체들을 은유해야 한다.


불안정한 기능을 담는 안정적인 도메인 모델 

189p에 이어서 하자









+ Recent posts