[객체지향의 사실과 오해] 6. 객체 지도

✨New Wisdom✨·2021년 1월 25일
1

📕 OOP 📕

목록 보기
6/8
post-thumbnail

"객체지향의 사실과 오해" 책 내용을 체화하기 위해 읽으며 기록하는 노트이다.

기능 설계 VS 구조 설계

  • 기능 설계 : 제품이 사용자를 위해 무엇을 할 수 있는지
  • 구조 설계 : 제품의 형태가 어때야 하는지

소프트웨어의 요구사항은 언제든지 변경될 수 있기 때문에 변경을 수용할 수 있는
섵낵의 여지를 설계에 마련해야 한다.
때문에 자주 변경되는 기능이 아닌 안정적인 구조를 중심으로 설계해야한다.

구조

사용자나 이해관계자들이 도메인에 관해 생각하는 개념과 개념들 간의 관계로 표현

도메인 모델

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

소프트웨어 상에서 최종 코드는 사용자가 도메인을 바라보는 관점을 반영해야 한다.

객체지향은 도메인에 대한 사용자 모델, 기자인 모델, 시스템 이미지 모두가 유사한 모습을
유지하도록 만드는 것이 가능하다.

표현적 차이

소프트웨어 객체와 현실 객체 사이는 모방이 아닌 은유의 관계이다.
이 사이의 의미적 거리를 표현적 차이라고 한다.
도메인 모델은 코드를 이해하기 더 쉽게 만들어준다.

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

도메인에 대해 사용자 관점을 반영하는 이유는 사용자들이 도메인의 본질적인 측면을
가장 잘 알고 있기 때문이다.
소프트웨어는 변경에 취약하지만 사용자 모델을 기반으로 설계와 코드를 만들면
변경에 쉽게 대처할 가능성이 커진다.

기능

사용자의 목표를 만족시키기 위해 책임을 수행하는 시스템의 행위로 표현

유스케이스

사용자의 목표를 달성하기 위해 사용자와 시스템 간 이뤄지는 상호작용의 흐름을
텍스트로 정리한 것
사용자들의 목표를 중심으로 시스템의 기능적인 요구사항들을 이야기 형식으로 묶을 수 있다.

특성

  • 유스케이스는 사용자와 시스템 간의 상호작용을 보여주는 텍스트이다.
  • 유스케이스는 하나의 시나리오가 아니라 여러 시나리오들의 집합이다. 시나리오를 유스케이스 인스턴스라고 한다.
  • 유스케이스는 단순한 기능 목록과 다르다. 유스케이스는 기능 나열이 아닌 이야기를 통해 연관된 기능을 묶을 수 있다.
  • 유스케이스는 사용자 인터페이스와 관련된 세부 정보를 포함하지 말아야 한다.
    (본질적인 유스케이스)
  • 유스케이스는 내부 설계와 관련된 정보를 포함하지 않는다.

유스케이스는 설계 기법도, 객체지향 기법도 아니다.
단지 사용자가 시스템을 통해 얻는 것과 상호작용하는 것에 대한 정보만 기술된다.
유스케이스는 객체의 구조나 책임에 대한 어떤 정보도 제공하지 않는다.

기능과 구조의 통합

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

  • 도메인 모델 : 기능을 수용하기 위해 은유할 수 있는 안정적 구조 제공
  • 유스케이스 : 불안정한 기능을 서술, 사용자에게 제공할 기능을 시스템의 책임으로 보게 함으로써 객체 간의 안정적 구조에 책임을 분배할 수 있는 출발점 제공
  • 책임-주도 설계 : 유스케이스로부터 첫 번째 메시지와 사용자가 달성하려는 목표를, 도메인 모델로부터 기능을 수용할 수 있는 안정적 구조를 제공 받아 객체들의 협력 공동체를 창조

변경에 유연한 소프트웨어를 만들기 위해서는 유스케이스에 정리된 시스템 기능을
도메인 모델을 기반으로 한 객체들의 책임으로 분배해야 한다.
시스템은 사용자와 만나는 경계에서 사용자와의 협력에 참여하는 큰 객체이다.
시스템이라는 객체 안에 더 작은 규모의 객체가 포함될 수 있다.

이제 시스템의 기능을 시스템의 책임으로 바꾸면서 협력은 시작한다.
어떤 객체를 선택할 때 도메인의 개념을 사용한다.
필요한 메시지를 식별하면서 객체들에게 책임을 할당해 나간다.

요구사항을 식별하고 도메인 모델을 생성한 후, 소프트웨어 클래스에 메서드들을 추가하고, 요구사항을 충족시키기 위해 객체들 간의 메시지 전공을 정의하라.

책임 할당의 기본 원칙은 책임을 수행하는 데 필요한 정보를 가진 객체에게
그 책임을 할당하는 것이다.

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

  • 도메인 모델을 구성하는 개념은 비즈니스가 없어지거나 완전히 개편되지 않는 한 안정적으로 유지된다.
  • 도메인 모델을 구성하는 개념 간의 관계는 비즈니스 규칙을 기반으로 하기 때문에 비즈니스 정책이 크게 변경되지 않는 한 안정적으로 유지된다.

가역성

객체지향의 연결완전성의 역방향 또한 만족시킨다.
코드의 변경으로부터 도메인 모델의 변경 사항을 유추할 수 있다.

profile
🚛 블로그 이사합니다 https://newwisdom.tistory.com/

0개의 댓글