유일하게 변하지 않는 것은 모든 것이 변한다는 사실뿐이다. -헤라클레이토스
목적지까지 길을 찾는 두 가지 방법
사람에게 물어물어 가는 방법(기능적이고 해결책 지향적인 접근법)
재활용이 불가능하다. 목적지가 변경되면 다시 물어야된다.
지도를 이용하는 방법(구조적이고 문제 지향적인 접근법)
재활용이 쉽고 구조가 상대적으로 안정적이다.
과거의 지도를 봐도 현재에 활용 가능
목적지가 변해도 지도를 보고 경로 수정 가능
지도의 핵심은 기능이 아니라 구조를 기반으로 모델을 구축한 것이다.
사람들의 요구사항은 계속 변할 수 밖에 없기 때문에 기능을 중심으로 구조를 종속시키는 접근법은 범용적이지 않고 재사용이 불가능하며 변경에 취약하다.
기능 설계 대 구조 설계
소프트웨어 제품의 설계 두 가지
- 기능 측면은 제품이 무엇을 할 수 있는지에 초점
- 구조 측면은 제품의 형태가 어떠해야 하는지 초점
가장 베스트는 두 개의 적절한 조화
요구사항은 반드시 변경된다 따라서 변경이 쉬운 설계가 중요하다.
좋은 설계는 나중에 변경할 수 있는 여지는 남겨놓은 설계다.
설계의 일차적인 목표는 변경에 소요되는 비용을 낮추는 것이다.
전통적인 기능 중심 설계는 자주 변경되는 기능을 중심으로 하기에 변경에 취약하다.
객체지향 접근방법은 자주 변경되지 않는 객체 구조를 바탕으로 시스템 기능을 객체 간의 책임으로 분대한다.
객체지향은 객체의 구조에 집중하고 기능이 객체의 구조를 따르게 만든다.
두 가지 재료: 기능과 구조
기능은 사용자의 목적을 달성하기 위한 시스템의 서비스
구조는 시스템의 기능을 구현하기 위한 기반, 쉬운 변경 구조가 핵심
기능과 구조를 표현하기 위한 두 가지 기법
- 기능 수집하고 표현하기 좋은 기법은 유스케이스 모델링
- 구조를 수집하고 표현하기 좋은 기법은 도메인 모델링
안정적인 재료 : 구조
도메인 모델
사용자가 프로그램을 사용하는 대상 분야를 도메인이라고 한다.
도메인 모델에서 모델이란 대상을 단순화해서 표현한 것
모델은 지식을 선택적으로 단순화하고 의식적으로 구조화한 형태다.
현실 세계의 복잡성에서 중요한 문제에 집중하여 불필요한 세부사항은 정리해 필요한 지식만 재구성
모델은 복잡성을 관리하기 위한 도구
도메인 모델은 소프트웨어 개발과 관련된 이해관계자들이 도메인에 대해 생각하는 관점
예시) 은행 업무에 종사하는 사람들은 은행 도메인을 고객과 계좌 사이의 돈의 흐름으로 생각할 것
도메인 모델은 단순히 다이어그램이 아니다. 도메인 모델은 이해관계자들이 바라보는 멘탈 모델(Mental Model)이다.
멘탈 모델이란 사람들이 자기 자신, 다른 사람, 환경, 자신이 상호작용하는 사물들에 대해 갖는 모형이다.
사람들은 세상에 존재하는 현상을 이해하고 현상에 반응하기 위해 자신의 마음 속에 멘탈 모델을 구축한다.
사람들은 자신의 멘탈 모델과 유사한 방식으로 제품이 반응하고 움직일 것이라고 기대하기 때문에 훌륭한 디자인이란 사용자가 예상하는 방식에 따라 정확하게 반응하는 제품을 만드는 것이다. - 도널드 노먼
노먼의 멘탈 모델은 세 가지로 구분된다.
사용자 모델, 디자인 모델, 시스템 이미지
사용자 모델과 디자인 모델이 동일하다면 이상적이다.
사용자와 설계자는 직접적으로 상호작용할 수 없으며 단지 최종 제품인 시스템 그 자체를 통해서만 의사소통할 수 있다.
따라서 설계자는 디자인 모델을 기반으로 만든 시스템 이미지가 사용자 모델을 정확하게 반영하도록 노력해야 한다.
도메인 모델은 도메인에 대한 사용자 모델, 디자인 모델, 시스템 이미지를 포괄하도록 추상화한 소프트웨어 모델이다. 따라서 도메인 모델은 소프트웨어에 대한 멘탈 모델이다.
도메인의 모습을 담을 수 있는 객체지향
최종 코드는 사용자가 도메인을 바라보는 관점을 반영해야한다.
객체지향은 도메인의 구조와 최대한 유사하게 코드를 구조화할 수 있다.
객체지향을 이용하면 도메인에 대한 사용자 모델, 디자인 모델, 시스템 이미지 모두가 유사한 모습을 유지하도록 만드는 것이 가능하다. 이런 특징을 연결 완전성, 표현적 차이라고 한다.
표현적 차이
소프트웨어는 현실세계에 대한 추상화가 아니다.
현실과 객체 사의 관계를 은유를 기반으로 재창조한 것이다.
따라서 현실 객체가 갖지 못하는 특성과 행동을 가질 수 있다.
그것이 비록 현실을 왜곡한다고 해도 말이다.
소프트웨어 객체와 현실 객체 사이의 의미적 거리를 가리켜 표현적 차이 또는 의미적 차이라 한다.
핵심은 은유를 통해 현실 객체와 소프트웨어 객체 사이의 차이를 최대한 줄이는 것이다.
안타깝지만 대부분의 소프트웨어 도메인은 현실에 존재하지 않는 가상의 세계를 대상으로 한다.
게임 도메인을 예를 들면 아주 현실에 존재하지 않는 강력한 마법과 괴물들의 천국이다.
여기에 빗대어 보면 현실 객체를 은유하라는 말이 공허한 메아리 같다.
그렇다면 은유의 대상을 바꿔보자. 바로 사용자가 도메인에 대해 생각하는 개념으로
결론적으로 소프트웨어는 현실적이건 비현실적이건 상관없이 도메인 모델을 통해 표현되는 도메인 객체들을 은유해야 한다.
그 결과로 표현적 차이는 줄어들어 사용자의 멘탈 모델이 그대로 코드에 녹아 들 것이다.
표현적 차이가 중요한 이유는 소프트웨어를 이해하고 수정하기 쉽게 만들어 주기 때문이다.
도메인 속의 개념과 관계가 코드 속에 녹아 있기 때문이다.
불안정한 기능을 담는 안정적인 도메인 모델
도메인 모델이 제공하는 구조는 상대적으로 안정적이다.
도메인에 대한 사용자 관점을 반영해야 하는 이유는 사용자들이 누구보다도 도메인의 '본질적인' 측면을 가장 잘 이해하고 있기 때문(멘탈 모델)
본질적이라는 것은 변경이 적고 비교적 그 특성이 오랜 시간 유지된다는 것을 의미한다.
사용자 모델에 포함된 개념과 규칙은 비교적 변경될 확률이 적기 때문에 사용자 모델 기반으로 설계와 코드를 만들면 변경에 쉽게 대처할 수 있을 가능성이 커진다.
도메인 모델은 기능을 담을 수 있는 안정적인 구조를 제공한다.
도메인 모델은 소프트웨어 구조의 기반이다.
안정적인 구조를 바탕으로 자주 변경되는 기능을 배치해 변경에 유연하게 대처가능하다.
도메인 모델의 장점은 비즈니스의 개념과 정책을 반영하는 안정적인 구조를 제공한다는 것이다.
비록 도메인 모델이 도메인과 관련된 중요한 개념과 관계를 보여준다고 해도 실제로 사용자에게 중요한 것은 도메인 모델이 아니라 소프트웨어의 기능이다.
소프트웨어의 존재 이유는 사용자가 원하는 목표를 달성할 수 있는 다양한 기능을 제공하는 것이다.
따라서 사용자에게 제공할 기능을 기술할 정보가 필요하다. 이를 위해 유스케이스라는 기법을 사용한다.
'IT책, 강의 > 객체지향의 사실과 오해(역할, 책임, 협력 관점에서 본 객체지향)' 카테고리의 다른 글
07 함께 모으기 (0) | 2023.01.01 |
---|---|
06 객체 지도 - 2 (0) | 2022.12.29 |
05 책임과 메시지 -2 (0) | 2022.12.22 |
05 책임과 메시지 -1 (0) | 2022.12.19 |
04 역할, 책임, 협력 - 2 (0) | 2022.12.16 |