6장. 객체 지도

KIMA·2023년 3월 30일
1
post-thumbnail

서론

기능 측면의 설계는 제품이 사용자를 위해 무엇을 할 수 있는지에 초점을 맞춘다.
구조 측면의 설계는 제품의 형태가 어떠해야 하는지에 초점을 맞춘다.
기능이 아닌 구조를 기반으로 해결 방법을 구축하는 편이 좀 더 범용적이고 이해하기 쉬우며 변경에 안정적이다.
전통적인 소프트웨어 빈번하게 변경되는 기능에 중심을 두고, 객체지향 개발 방법은 안정적인 구조에 중심을 둔다.

본론

기능 설계 대 구조 설계

깔끔하고 단순하며 유지보수하기 쉬운 설계는 사용자의 변하는 요구사항을 반영할 수 있도록 쉽게 확장 가능한 소프트웨어를 창조할 수 있는 기반이 된다.
안타깝게도 사용자의 요구사항은 항상 변경되므로, 설계라는 행위가 매우 중요해진다.
훌륭한 설계자는 사용자가 만족할 수 있는 훌륭한 기능을 제공하는 동시에 예측 불가능한 요구사항 변경에 유연하게 대처할 수 있는 안정적인 구조를 제공하는 능력을 갖춰야한다.

미래에 대비하는 가장 좋은 방법은 변경을 예측하는 것이 아니라 변경을 수용할 수 있는 선택의 여지를 설계에 마련해 놓는 것이다.

두 가지 재료: 기능과 구조

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

일반적으로 기능을 수집하고 표현하기 위한 기법을 유스케이스 모델링이라고 하고
구조를 수집하고 표현하기 위한 기법을 도메인 모델링이라고 한다.

안정적인 재료: 구조

도메인 모델

사용자가 프로그램을 사용하는 대상 분야를 도메인이라고 한다.

멘탈 모델이란 사람들이 자기 자신, 다른 사람, 환경, 자신이 상호작용하는 사물들에 대해 갖는 모형이다.
도널드 노먼은 멘탈 모델을 사용자 모델, 디자인 모델, 시스템 이미지의 세 가지로 구분한다.

  • 사용자 모델은 사용자가 제품에 대해 가지고 있는 개념들의 모습이다.
  • 디자인 모델은 설계자가 마음 속에 갖고 있는 시스템에 대한 개념화이다.
  • 시스템 이미지는 최종 제품이다.

사용자 모델과 디자인 모델이 동일하다면 이상적이겠지만 사용자와 설계자는 직접적으로 상호작용할 수 없으며 단지 최종 제품인 시스템 그 자체를 통해서만 의사소통할 수 있다. 따라서 설계자는 디자인 모델을 기반으로 만든 시스템 이미지가 사용자 모델을 정확하게 반영하도록 노력해야한다.
도메인 모델은 소프트웨어에 대한 멘탈 모델이다.

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

객체지향 패러다임은 사용자의 관점, 설계자의 관점, 코드의 모습을 모두 유사한 형태로 유지할 수 있게 하는 유용한 사고 도구와 프로그래밍 기법을 제공한다.
결론적으로 객체지향을 이용하면 도메인에 대한 사용자 모델, 디자인 모델, 시스템 이미지 모두가 유사한 모습을 유지하도록 만드는 것이 가능하다. 객체지향의 이러한 특성을 연결완전성 또는 표현적 차이라 한다.

표현적 차이

소프트웨어 객체는 현실 객체가 갖지 못한 특성을 가질 수도 있고 현실 객체가 하지 못하는 행동을 할 수 있다. 이처럼 소프트웨어 객체와 현실 객체 사이의 의미적 거리를 가리켜 표현적 차이 또는 의미적 차이라고 한다. 핵심은 사용자가 도메인에 대해 생각해는 개념들을 그대로 코드에 반영하여 표현적 차이를 줄이는 것이다.

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

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

정기예금의 도메인 모델

불안정한 재료: 기능

유스케이스

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

Reference

  • 객체지향의 사실과 오해, 조영호 지음
profile
안녕하세요.

0개의 댓글