[정리] 객체지향의 사실과 오해 - 6장
06 / 객체 지도
길을 찾기 위한 두 가지 방법이 있다.
첫 번째는 다른 사람에게 길을 물어보는 것이고, 두 번째는 지도로 지형을 파악한 후 찾아가는 방법이다.
첫 번째 방법은 기능적이고 해결 지향적이다. 반면, 두 번째 방법은 구조적이고 문제 지향적이다.
두 번째 지도를 활용한 방법은 길을 찾기 위한 구체적인 '기능'이 아니라, 길을 찾을 수 있는 '구조'를 제공한다.
6장은 객체 설계를 지도에 빗대어 기능과 구조를 사용한 설계 방법 등에 대해 설명한다.
기능 설계 대 구조 설계
사용자가 원하는 기능을 제공할 수 있다면 설계가 어떠한지는 중요하지 않을 수 있다.
다만, 이 가정은 사용자가 원하는 기능(요구사항)이 바뀌지 않는다는 전제가 필요하다.
요구사항은 끊임없이 변경되기 때문에 이에 빠르게 대응하기 위해선
기능에 집중하기 보다 변화에 유연하게 대응할 수 있는, 비교적 불변하는 구조에 초점을 맞춰 설계해야 한다.
기능 중심으로 설계를 하게 되면 요구사항이 변경될 때마다 소프트웨어 전체가 요동칠 수 있다.
두 가지 재료 : 기능과 구조
객체 지향 세계를 구축하기 위해선
사용자에게 제공할 '기능'과 기능을 담을 안정적인 '재료'가 필요하다
기능
- 사용자의 목표를 만족시키기 위해 책임을 수행하는 시스템의 행위로 표현
- 유스케이스 모델링 : 기능을 수집하고 표현하기 위한 기법
구조
- 사용자나 이해관계자들이 도메인에 관해 생각하는 개념과 개념들과 관계로 표현
- 도메인 모델링 : 구조를 수집하고 표현하기 위한 기법
안정적인 재료 : 구조
도메인 모델
- 사용자가 사용하고자 하는 대상 영역에 관현 지식을 (= 도메인)
선택적으로 단순화 하고 의식적으로 구조화한 형태 (= 모델)
도메인 모델은 단순한 다이어그램이 아닌
이해 관계자들이 바라보는 관점/개념. 즉, 멘탈모델로 모델링 되어야 한다.
사용자들은 도메인의 본질을 잘 이해하고 있는 사람들이며,
도메인은 쉽게 변하지 않기 때문에 기능보다 안정적인 구조를 제공할 수 있다.
또한 도메인 모델은
1) 사용자들이 바라보는 관점이자
2) 설계자가 시스템 구조를 바라보는 관점이며
3) 동시에 소프트웨어 내에 구현된 코드 모습이다.
이 세 이미지가 모두 유사한 모습을 가져야 하며 객체지향은 이를 가능하게 해준다.
세 이미지가 유사한 모습을 가져야 한다는 것은 '모방'이 필요하다는 의미가 아니다.
앞서 얘기 되었듯 객체지향 세계는 현실세계에 대한 '모방'이 아니며,
현실세계에서 불가능한 것들, 실제 존재하지 않는 것들이 있을 수 있다.
이런 객체지향 세계와 현실세계의 차이는 '은유'를 통해 해결될 수 있다.
불안정한 재료 : 기능
시스템은 사용자의 목표를 해결하기 위해 '기능'을 제공한다.
우리는 '기능'을 사용자-시스템 간 목표해결을 위한 '상호작용' 관점에서 바라봐야 한다.
유스케이스
- 사용자와 시스템 간 상호작용을 보여주는 텍스트이다.
- 하나의 시나리오가 아닌 여러 시나리오들의 집합이다.
- 단순한 피처 목록과 다르다. 즉, 단순하게 기능 목록을 나열한 것과 다르다.
- 사용자 인터페이스와 관련된 세부 정보를 포함하지 말아야 한다.
- 내부 설계 관련 정보도 포함하지 말아야 한다.
유스케이스는 설계나 객체지향 기법이 아니다.
단지 사용자가 시스템을 통해 무엇을 얻을 수 있고 그 과정에서 어떻게 상호작용하는지만 기술된다.
재료 합치기 : 기능과 구조의 통합
도메인 모델은 안정적인 구조를 개념화하기 위한 도구이고,
유스케이스는 불안정한 기능을 서술하기 위해 사용되는 도구이다.
변경에 유연한 소프트웨어를 만들기 위해서는
유스케이스에 정리된 시스템 기능을 도메인 모델 기반으로 한 객체들의 책임으로 분배해야 한다.
책임-주도 설계는
유스케이스로부터 첫 번째 메시지와 사용자가 달성하려는 목표를 추출하고
도메인 모델로부터 구조를 제공받아 실제 동작하는 객체들의 협력 공동체를 창조한다.
첫 번째 메시지를 통해 목표 달성을 위한 기능 제공 책임을 맡은 시스템은
맡은 책임을 시스템 내 작은 규모로 세분화하고 이 과정을 반복하면서 객체 간 협력을 완성해간다.
책임-주도 설계 방법은
시스템의 기능을 역할과 책임을 수행하는 객체들의 협력관계로 바라보게 함으로써
두 가지 기본재료인 유스케이스와 도메인 모델을 통합한다.