기능 설계와 구조 설계
모든 소프트웨어 제품의 설계에는 두가지 측면이 존재한다
- 기능 : 제품이 사용자를 위해 무엇을 할 수 있는지에 초점
- 구조 : 제품의 형태가 어떠해야 하는지에 초점
소프트웨어 분야에서 예외가 없는 유일한 규칙은 요구사항이 항상 변경된다는 것.
설계라는 행위를 중요하게 만드는 것은 변경에 대한 필요성이다. 변경을 피할 수 있는 방법은 없기 때문에 변경에 유연하게 대처할 수 있는 구조를 갖춰야 한다.
자주 변경되는 기능이 아닌 안정적인 구조를 중심으로 설계해야 한다.
기능과 구조
구조는 사용자나 이해관계자들이 도메인에 관해 생각하는 개념과 개념들 간의 관계를 표현함
일반적으로 기능을 수집하고 표현하기 위한 기법을 유스케이스 모델링이라고 하고, 구조를 수집하고 표현하기 위한 기법을 도메인 모델링이라고 한다.
안정적인 재료 : 구조
도메인 모델은 사용자가 프로그램을 사용하는 대상 영역에 관한 지식을 선택적으로 단순화하고 의식적으로 구조화한 형태이다.
도메인 모델은 단순히 다이어그램이 아닌, 이해관계자들이 바라보는 멘탈모델이다.
멘탈모델이란 사람들이 자기 자신, 다른사람, 환경, 상호작용하는 사물들에 갖는 모형임.
사용자들은 자신의 멘탈모델과 유사한 방식으로 제품이 반응하고 움직일 것이라고 기대하기 때문에 훌륭한 디자인이란 사용자가 예상하는 방식에 따라 정확하게 반응하는 제품을 만드는 것이다.
사용자의 모델과 디장니 모델이 동일하다면 이상적이겠지만 사용자와 설계자는 직접 상호작용할 수 없음. 최종 제품인 시스템 자체를 통해서만 의사소통 할 수 있다.
설계자는 디자인 모델을 기반으로 만든 시스템 이미지가 사용자 모델을 정확하게 반영하도록 노력해야 한다.
프로그램의 최종 코드는 사용자가 도메인을 바라보는 관점을 반영해야한다. 즉 앱이 도메인 모델을 기반으로 설계되어야 함.
객체지향을 사용하면 사용자들이 이해하고 있는 도메인의 구조와 최대한 유사하게 코드를 구조화할 수 있다.
객체지향 세계의 객체는 현실 객체에 대한 추상화가 아닌, 실제 객체의 은유이다.
우리가 은유를 통해 투영해야 할 대상은 사용자가 도메인에 대해 생각하는 개념들이다. 즉 소프트웨어 객체를 창조하기 위해 우리가 은유해야 할 대상은 도메인 모델이다.
도메인 모델을 기반으로 설계하고 구현하는 것은 사용자가 도메인을 바라 보는 관점을 그대로 코드에 반영할 수 있게 한다. 결과적으로 표현의 차이가 줄어들고, 사용자의 멘탈모델이 그대로 코드에 녹아 스며든다. → 이해하기 쉬워짐
도메인 모델이 제공하는 구조가 상대적으로 안정적이기 때문에 도메인 모델을 기반으로 코드를 작성해야 한다.
도메인에 대한 사용자의 관점을 반영해야 하는 이유는 사용자들이 누구보다도 도메인의 본질적인 측면을 가장 잘 이해하고 있기 때문이다. 본질적이라는 것은 변경이 적고 비교적 그 특성이 오랜 시간 유지된다는 것을 의미함.
사용자 모델에 포함된 개념과 규칙은 비교적 변경될 확률이 적기 때문에 사용자 모델을 기반으로 설계와 코드를 만들면 변경에 쉽게 대처할 수 있을 가능성이 커진다.
불안정한 재료 : 기능
유즈케이스 - 사용자의 목표를 달성하기 위해 사용자와 시스템 간에 이뤄지는 상호작용의 흐름을 텍스트로 정리한 것. 산발적으로 흩어져 있는 기능에 사용자의 목표라는 문맥을 제공함으로써 각 기능이 유기적인 관계를 지닌 체계를 이룰 수 있게 한다.
재료 합치기 : 기능과 구조의 통합
불안정한 기능을 안정적인 구조 안에 담음으로써 변경에 대한 파급효과를 최소화해야 한다.
도메인 모델은 안정적인 구조를 개념화하기 위해, 유즈케이스는 불안정한 기능을 서술하기 위해 가장 일반적으로 사용되는 도구이다. 변경에 유연한 소프트웨어를 만들기 위해 유즈케이스에 정리된 시스템의 기능을 도메인 모델을 기반으로 한 객체들의 책임으로 분배해야 한다.
Loading Comments...