flagtags / OOP-study

0 stars 0 forks source link

6장. 객체 지도 #6

Open j03y14 opened 6 months ago

j03y14 commented 6 months ago

모르는 길 찾을 때

  1. 물어보기: 경로를 상세히 설명해야 한다. 재사용 불가능하다.
  2. 지도 보기: 다양한 목적을 위해 재사용 될 수 있다.

지도가 범용적인 이유는 잘 변하지 않는 안정적인 지형 정보를 기반으로 하기 때문이다.

즉, 기능이 아니라 구조를 기반으로 모델을 구축하는 것이 더 범용적이고 이해하기 쉬우며 안정적이다.

기능 설계 대 구조 설계

기능: 무엇을 할 수 있는지 구조: 제품의 형태가 어때야 하는지

기능을 제공하는 것은 당연하고, 새로운 기능을 안정적으로 추가할 수 있어야 한다.

미래의 변경에 대비하는 가장 좋은 방법은 변경을 수용할 수 있는 여지를 마련해놓는 것이다.

객체지향은 객체의 구조에 집중하고 기능이 구조를 따르게 만든다. 기능이 변경되더라도 객체간의 구조는 유지된다.

기능과 구조

안정적인 구조

도메인 모델은 사용자가 프로그램을 사용하는 대상 영역에 대한 지식을 선택적으로 단순화하고 구조화한 형태.

제품을 설계할 때 제품에 관한 모든 것이 사용자들이 제품에 대해 가지고 있는 멘탈 모델과 정확하게 일치해야 한다.

그래서 왜 구조가 안정적이라는거지..?

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

최종 코드는 사용자가 도메인을 바라보는 관점을 반영해야 한다. 객체지향은 사용자 관점, 설계자의 관점, 코드의 모습을 유사한 형태로 유지할 수 있게 해준다.

표현적 차이

소프트웨어 객체와 현실 객체 사이의 의미적 거리를 표현적 차이라고 한다. 이 거리를 은유를 통해 줄여야 하는데 소프트웨어 객체를 창조하기 위해 은유해야 하는 대상은 도메인 모델이다.

불안정한 기능을 담는 안정적인 도메인 모델

도메인 모델이 제공하는 구조는 상대적으로 안정적이다. 사용자들은 도메인의 본질적인 측면을 잘 이해하고 있고, 본질적인 특성은 비교적 오래 유지된다. 도메인 모델이 기능을 담을 수 있는 안정적인 구조를 제공한다.

불안정한 기능

유스케이스

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

사용자와 시스템간의 상호작용을 보여준다. 유스케이스는 목표와 관련된 모든 시나리오의 집합이다. 피쳐와는 달리 사용자와의 흐름 속에서 본다는 점에서 피쳐와는 다르다. 인터페이스의 정보는 포함하지 말아야 한다. 내부 설계와 관련된 정보를 포함하지 않는다.

구조와 기능의 통합

유스케이스의 기능을 도메인 모델을 기반으로 한 객체들의 책임으로 분배해야 한다. 이 때 어떤 객체를 선택할지는 도메인 모델을 이용해서 선택해야 한다.

객체지향을 통해서 도메인 모델과 코드가 매끄럽게 연결될 수 있도록 한다. 코드를 더 이해하기 쉽고, 핵심 정책이 변경되지 않는 한 전체 구조가 한번에 흔들리지는 않게 만든다.

kkirico commented 6 months ago

6장 객체지도

기능에 비해 안정적인 구조

기능이 아니라 구조를 기반으로 모델을 구축하는 편이 좀 더 범용적이고 이해하기 쉬우며 변경에 안정적이다.

변경이 빈번하게 발생하는 기능에 안정적인 구조를 종속시켜야 한다.

기능 설계 대 구조 설계

요구사항은 항상 변경된다.

미래의 예측 불가능한 요구사항에 대비하는 가장 좋은 방법은

예측하는게 아니라 변경을 수용할 수 있는 선택의 여지를 설계에 마련하는 것이다.

설계의 일차적인 목표는 변경에 소요되는 비용을 낮추는 것이다.

자주 변경되지 않는 안정적인 객체 구조를 바탕으로 시스템 기능을 객체 간의 책임으로 분배하면, 기능이 변경되더라도 구조는 유지된다.

객체지도는 빠르게 변화하는 기능을 수용할 수 있는 빈 자리를 제공한다.

두 가지 재료: 기능과 구조

기능: 사용자가 자신의 목표를 달성하기 위해 사용할 수 있는 시스템의 서비스, 책임을 수행하는 시스템의 행위로 표현한다.

구조:시스템의 기능을 구현하기 위한 기반, 사용자나 이해관계자들이 도메인에 관해 생각하는 개념과 개념들 간의 관계로 표현한다.

안정적인 재료: 구조

도메인 모델

모델이란 대상을 단순화해서 표현한 것이다.

도메인 모델이란 사용자가 프로그램을 사용하는 대상 영역에 ㅈ관한 지식을 선택적으로 단순화하고 의식적으로 구조화한 형태다

소프트웨어가 목적하는 영역 내의 개념과 개념간의 관계, 다양한 규칙이나 제약 등을 주의 깊게 추상화 한 것이다.

도메인 모델은 이해관계자들이 바라보는 멘탈 모델이다.

사용자들이 제품에 대해 가지고 있는 멘탈모델과 일치할 수록 좋다.

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

최종 제품은 사용자의 관점을 반영해야 한다.

도메인 모델이란

사용자들이 도메인을 바라보는 관점이며

설계자가 시스템의 구조를 바라보는 관점인 동시에

소프트웨어 안에 구현된 코드의 모습 그 자체이다.

이러한 특징을 연결완정성 이라한다.

객체지향을 사용해서 사용자들이 이해하고 있는 도메인의 구조와 최대한 유사하게 코드를 구조화 할 수 있다.

표현적 차이

결국 소프트웨어 객체를 창조하기 위해 우리가 은유해야 할 대상은 도메인 모델이다.

불안정한 기능을 담는 안정적인 도메인 모델

사용자 모델에 포함된 개념과 규칙은 비교적 변경될 확률이 적기 때문에 사용자 모델을 기반으로 설계와 코드를 만들면 변경에 쉽게 대처할 수 있다.

도메인 모델은 기능을 구현할 때 참조하는 궁극적인 지도다.

불안정한 재료: 기능

유즈케이스

사용자들의 목표를 중심으로 시스템의 기능적 요구사항들을 이야기 형식으로 묶을 수 있다.

유즈케이스는 설계 기법도, 객체지향 기법도 아니다.

유즈케이슨느 단지 사용자가 시스템을 통해 무엇을 얻을 수 있고 어떻게 상호작용할 수 있느냐에 관한 정보만 기술된다.

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

도메인 모델, 유즈케이스, 그리고 책임-주도 설계

변경에 유연한 소프트웨어를 만들기 위해서는 유즈케이스에 정리된 시스템의 기능을 도메인 모델을 기반으로 한 객체들의 책임으로 분배해야 한다.

시스템의 책임이란 무엇인가? → 유즈 케이스

작은 규모의 책임으로 세분화

어떤 객체를 선택할 것인가? → 도메인 모델

유즈케이스는 사용자에게 제공할 기능을 시스템 책임으로 보게 함으로써 객체간의 안정적인 구조에 책임을 분배할 수 있는 출발점을 제공한다.

객체의 이름은 도메인 모델에 포함된 개념으로부터 차용하고, 책임은 도메인 모델에 정의한 개념의 정의에 부합하도록 할당한다.

기능을 흡수하는 안정적인 구조

도메인 모델을 구성하는 개념은 비즈니스가 없어지거나 완전히 개편되지 않는 한 유지된다.

도메인 모델을 구성하는 개념 간의 관계는 비즈니스 규칙을 기반으로 하기 때문에 비즈니스 정책이 크게 변경되지 않는 한 유지된다.

kkirico commented 6 months ago

도메인 모델을 어떻게 구축하는지?