객체지향의 사실과 오해

백승우·2024년 7월 30일

06. 객체 지도

기능 설계 대 구조 설계

모든 소프크웨어 제품의 설계에는 두 가지 측면이 존재한다. 하나는 기능 측면의 설계이고, 다른 하나는 구조 측면의 설계이다.

객체지향은 객체의 구조에 집중하고 기능이 객체의 구조를 따르게 만든다. 시스템 기능은 더 작은 채임으로 분할되고 적절한 객체에게 분배되기 때문에 기능이 변경되더라도 객체간의 구조는 그대로 유지된다.

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

두 가지 재료: 기능과 구조

객체지향 세계를 구축하기 위해서는 사용자에게 제공할 기능과 기능을 담을 안정적인 구조라는 재료가 준비되어 있어야 한다.

  • 구조는 사용자나 이해관계자들이 도메인에 관해 생각하는 개념과 개념들 간의 관계로 표현한다.
  • 기능은 사용자의 목표를 만족 시키기 위해 책임을 수행하는 시스템의 행위로 표현한다.

    안정적인 재료: 구조

도메인 모델

노먼은 아래 그림과 같이 멘탈 모델을 사용자 모델, 디자인 모델, 시스템의 이미지 세가지로 구분한다.

도메인 모델은 도메인에 대한 사용자 모델, 디자인 모델, 시스템 이미지를 포괄하도록 추상화한 소프트웨어 모델이다.

표현적 차이

소프트웨어 객체와 현실 객체 사이의 의미적 거리를 가리켜 표현적 차이 또는 의미적 차이라고 한다. 핵심은 현실 객체와 소프트웨어 객체 사이의 차이를 최대한 줄이는 것이다.

따라서 도메인 모델을 통해 표현되는 도메인 객체들을 은유해야 한다. 도메인 모델을 기반으로 설계하고 구현하는 것은 표현적 차이는 줄어들 것이며, 사용자의 멘탈 모델이 그대로 코드에 녹아 스며들게 될 것이다.

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

안정적인 구조를 제공하는 도메인 모델을 기반으로 소프트웨어의 구조를 설계하면 변경에 유연하게 대응할 수 있는 탄력적인 소프트웨어를 만들 수 있다. 도메인 모델은 여러분이 기능을 구현할 때 참조할 수 있는 궁극적인 지도이다.

불안정한 재료: 기능

유스케이스

훌륭한 기능적 요구사항을 얻기 위해서는 시스템간의 상호작용 관점에서 시스템을 바라봐야 한다.

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

유스케이스의 특성

첫째, 유스케이스는 사용자와 시스템간의 상호작용을 보여주는 텍스트다.

둘째, 유스케이스는 하나의 시나리오가 아니라 여러 시나리오들의 집합이다. 시나리오를 유스케이스 인스턴스라고도 한다.

셋째, 유스케이스는 단순한 피처 목록과 다르다. 연관된 기능들을 함께 묶을 수 있다.

넷째, 유스케이스는 사용자 인터페이스와 관련된 세부 정보를 포함하지 말아야 한다. 이와 같은 형식을 본질적인 유스케이스라고 한다.

다섯째, 유스케이스는 내부 설계와 관련된 정보를 포함하지 않는다.

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

유스케이스는 시스템의 내부 구조나 실행 메커니즘에 관한 어떤 정보도 제공하지 않는다. 단지 사용자가 시스템을 통해 무엇을 얻을 수 있고 어떻게 상호작용할 수 있느냐에 관한 정보만 기술된다.

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

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


시스템에 할당된 커다란 책임은 이제 시스템 안의 작은 규모의 객체들이 수행해야 하는 더 작은 규모의 책임으로 세분화 한다.

위 그림과 같이 우리는 도메인 모델에 포함된 개념을 은유하는 소프트웨어 객체를 선택해야 한다.

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

책임-주도 설계 방법은 시스템의 기능을 역할과 책임을 수행하는 객체들의 협력관계로 바라보게 함으로써 두 가지 기본 재료인 유스케이스와 도메인 모델을 통합한다.

profile
나는 부자가 될래!😼🐰❤️

0개의 댓글