2 분 소요

[Chap 06] 객체 지도

기능 설계 대 구조 설계

기능 측면의 설계는 제품이 사용자를 위해 무엇을 할 수 있는지에 초점을 맞춘다.
구조 측면의 설계는 제품의 형태가 어떠해야 하는지에 초점을 맞춘다.

여기서 소프트웨어 설계를 신중히 해야되는 이유는 제품 사용자의 요구사항은 항상 변경되기 때문이다. 설계라는 행위를 중요하게 만드는 것은 변경에 대한 필요성이다.
우리는 미래를 예측할 수 없지만 대비할 수 있다. 이런 대비를 설계로서 한다는 것이다. 미래에 대비하는 가장 좋은 방법은 변경을 예측하는 것이 아니라 변경을 수용할 수 있는 선택의 여지를 설계에 마련해 놓는 것이다.

그럼 여기서 어떻게 변경의 여지를 설계에 마련을 해놓을까?
자주 변경되는 기능이 아닌 안정적인 구조를 중심으로 설계하는 것이다. 안정적인 구조란 쉽게 변하지 않는 구조를 말한다. 예를 들어서 정기 예금, 이자, 이자율의 관계를 본다면 은행에서 정기 예금에 대한 상품이 없어지지 않는 한 3개의 구조 관계는 무조건 고정되어 있다.
이런 구조를 바탕으로 시스템 기능을 객체 간의 책임으로 분배를 하면 된다.

객체 지향은
객체의 구조에 집중하고
기능이 객체의 구조를 따르게 만든다.

왜냐하면 기능은 변경될 수 있지만 구조는 그대로 유지되기 때문이다.

안정적인 재료: 구조

도메인 모델

도메인이란 프로그램을 사용하는 대상 분야라고 한다.
도메인 모델이란 사용자가 프로그램을 사용하는 대상 영역에 관한 지식을 선택적으로 단순화하고 의식적으로 구조화한 형태이다. 즉, 도메인 모델은 사용자가 바라보는 멘탈 모델이다.

멘탈 모델이란 존재하는 현상을 이해하고 현상에 반응하기 위해 자신의 마음 속에 멘탈 모델을 말한다.
멘탈 모델을 사용자 모델, 디자인 모델, 시스템 이미지의 세 가지로 구분한다.
사용자 모델은 사용자가 제품에 대해 가지고 있는 개념들의 모습이고
디자인 모델은 설계자가 마음 속에 갖고 있는 시스템에 대한 개념화이다.
시스템 이미지는 최종 제품이다.

설계자와 사용자는 시스템 이미지를 통해서 상호작용을 할 수 있으며 디자은 모델을 기반으로 만든 시스템 이미지가 사용자 모델을 정확하게 반영하도록 노력해야 한다.

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

결국, 도메인 모델이란 사용자들이 도메인을 바라보는 관점이며, 설계자가 시스템의 구조를 바라보는 관점인 동시에 소프트웨어 안에 구현된 코드의 모습 그 자체이다.

결국 도메인 모델을 통해서 안정적 구조를 만들고 이 구조에 불안정한 기능을 담아야 재사용성이 큰 코드를 작성할 수 있다는 것이다.
특히, 도메인의 경우는 설계자 중심의 도메인이 아닌 사용자의 관점에서의 도메인 구조를 반영해야되는데 그 이유는 사용자들이 누구보다도 도메인의 ‘본질적인’ 측면을 가장 잘 이해하고 있기 때문이다.

불안정한 재료: 기능

유스케이스

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

한 마디로 사용자가 요구하는 여러 기능 시나리오들의 집합이라고 할 수 있다.
여기서 유스케이스는 객체의 구조나 책임에 대한 어떤 정보도 제공하지 않는다.

재료 합치기: 기능과 구조의 통합

도메인 모델은 안정적인 구조를 개념화하기 위해, 유스케이스는 불안정한 기능을 서술하기 위해 가장 일반적으로 사용되는 도구다.
이 두 가지의 도구를 책임-주도 설계에 사용하여 보다 효율적인 객체지향 설계가 가능하다.

책임-주도 설계는 유스케이스로부터 첫 번째 메시지와 사용자가 달성하려는 목표를, 도메인 모델로부터 기능을 수용할 수 있는 안정적인 구조를 제공받아 실제로 동작하는 객체들의 협력 공동체를 창조한다.

예를 들자면
유스케이스의 기능 중 ‘중도 해지 이자액을 계산하라’ 라는 기능이 있다.
이 기능은 시스템의 책임, 목표가 된다. 따라서 계산하라는 메시지를 받을 객체를 선택해야 된다.
객체를 선택하기 위해서는 도메인 모델을 바탕으로 어떤 객체가 적합한지를 본다.
도메인 모델을 기반으로 시스템의 책임을 분할하고 객체들에게 할당함으로써 협력하는 객체들의 공통체를 형성할 수 있다.

정리

이번 장에서는 기능과 구조에 대해서 배웠다. 기능의 경우는 사용자의 요구사항이므로 변경될 가능성이 높아서 불안정하지만 구조의 경우는 안정적/본질적이므로 잘 변경되지 않는다.

따라서 안정적인 구조를 바탕으로 사용자의 기능을 분배를 하는 것이 객체지향 설계에 적합하다는 것을 알았다.

안정적인 구조 는 사용자 기준의 도메인 모델을 바탕으로 해야 좀 더 본질적인 구조를 가져올 수 있으며, 이를 도메인 모델 이라고 한다.
유스케이스 를 통해서 목표를 달성하기 위해 사용자와 시스템 간에 이뤄지는 상호작용의 흐름을 정리하여 최종적으로는 사용자가 원하는 목표를 달성하기 위한 기능 을 말한다.

도메인 모델과 유스케이스를 통해서 책임-주도 설계가 가능하다. (자세한 예시는 다음 장에서 나온다.)

태그:

카테고리:

업데이트:

댓글남기기