모든 소프트웨어는 사용자 필요성을 충족시키기 위해 존재한다.
소프트웨어를 사용하는 사람들은 자신이 관심을 가지고 있는 특정한 분야를 해결하기 위해 소프트웨어를 사용한다.
이처럼 사용자가 프로그램을 사용하는 대상 분야를 도메인이라고 한다.
모델이란 대상을 단순화해서 표현한 것이다. 지식을 선택적으로 단순화하고 의식적으로 구조화한 형태다.
도메인과 모델의 정의를 연결하면 도메인 모델을 쉽게 정의할 수 있다.
도메인 모델이란 사용자가 프로그램을 사용하는 대상 영역에 관한 지식을 선택적으로 단순화하고 의식적으로 구조화한 형태다.
도메인 모델은 소프트웨어가 목적하는 영역 내의 개념과 개념 간의 관계, 다양한 규칙이나 제약 등을 주의 깊게 추상화한 것이다.
소프트웨어 도메인이 무엇이건 상관없이 그곳에는 항상 도메인과 관련된 사람들이 도메인을 바라보는 모델이 존재한다.
도메인 모델은 단순히 다이어그램이 아니다. 이해 관계자들과 상호작용하는 사물들에 대해 갖는 모형이다.
이러한 모형을 멘털 모델이라고 한다.
사용자들은 자신의 멘털 모델과 유사한 방식으로 제품이 반응하고 움직일 것이라고 기대하기 때문에 훌륭한 디자인이란 사용자가 예상하는 방식에 따라 정확하게 반응하는 제품을 만드는 것이다.
결국 최종 소프트웨어는 사용자의 관점을 반영해야 한다는 것을 뜻하며 이는 소프트웨어 개발에도 동일하게 적용할 수 있다.
이를 모델링할 수 있는 유사한 모델링 패러다임을 사용하면 소프트웨어 개발이 쉬워질 수 있다. 객체지향은 이런 요구사항을 범용적으로 만족시킬 수 있는 거의 유일한 모델링 패러다임이다.
객체지향을 이용하면 도메인에 대한 사용자 모델, 디자인 모델, 시스템 이미지 모두가 유사한 모습으로 유지하도록 만드는 것이 가능하다.
다양한 회사는 여러 서비스를 사용자에게 제공한다. 회사의 서비스가 제공하는 도메인의 구조는 코드의 구조와 동일시되기 마련이다. 따라서 도메인을 이해하면 코드를 이해하기가 훨씬 수월해진다. 도메인 속의 개념이 코드에 녹아 있기에 방대한 코드 속에서도 길을 잃지 않을 수 있을 것이다.
이 점을 기억하자.
왜 회사에서 고객들의 소리를 듣기 위해 애를 쓰는지 알 것 같다. 고객들이 바라보는 관점과 시스템이 제공하는 관점이 같은지 반복적으로 체크하고 엇나갔다면 그를 수정하기 위함일 것이다.
이는 개발자라도 고객의 소리에 집중해야 함을 깨닫게 해 준다. 사용자가 바라보는 도메인 모델과 내가 작성하고 있는 코드가 같은지 확인하는 습관이 필요할 것 같다.
개발직군에서 많은 경력을 쌓은 분들은 여러 도메인에 대한 지식이 쌓였을 것이고 이것 또한 경력이다. 이를 통해 업무 분석과 바로 업무에 들어갈 수 있는 준비가 되어있다고 보기 때문인 것 같다.
도메인 모델은 안정적인 구조를 개념화하기 위해 제공된다. 이 내부에 불안정한 기능을 담기 위해 노력하며
불안정한 기능을 서술하기 위해 일반적으로 유스 케이스를 이용한다.
변경에 유연한 소프트웨어를 만들기 위해서는 유스케이스에 정리된 시스템의 기능을 도메인 모델을 기반으로 한 객체들의 책임으로 분배해야 한다.
이를 통해 책임을 분배 하기 위해선 도메인 모델에 포함된 개념으로부터 이름을 차용하고, 책임은 도메인 모델에 정의한 개념의 정의에 부합하도록 할당한다.
책임을 할당할 대 기본 원칙이 존재하는데, 책임을 수행하는 데 필요한 정보를 가진 객체에게 그 책임을 할당하는 것이다. 이것은 상태와 행동을 캡슐화하는 자율적인 객체를 낳는다.
도메인 모델을 안정적인 구조라고 하는 이유는 다음과 같은 특성을 갖고 있기 때문이다.
- 도메인 모델을 구성하는 개념은 빠르게 변하지 않고 안정적으로 유지될 수 있다.
- 도메인 모델을 구성하는 개념 간의 관계는 비즈니스 규칙을 기반으로 하기에 비즈니스 정책이 크게 변경되지 않는 한 안정적으로 유지된다.
이 같은 특징은 기본적인 객체지향 설계 방식의 유연함을 잘 보여준다. 비지니스 정책이나 규칙이 크게 변경되지 않는 한 시스템의 기능이 변경되더라도 객체 간의 관계는 일정하게 유지된다.
안정적인 도메인 모델과 코드를 밀접하게 연관시키기 위해 노력하자.
'독서에서 한걸음' 카테고리의 다른 글
Clean Code .Part4 (0) | 2022.04.09 |
---|---|
Clean Code .Part3 (0) | 2022.04.07 |
Clean Code .Part 2 (0) | 2022.04.06 |
메시지 (0) | 2022.03.31 |
자율적인 책임 (0) | 2022.03.29 |
댓글