<객체지향의 사실과 오해, 조영호 지음 / 위키북스> 6장을 읽고 정리한 내용입니다.

객체지도란?

해당 챕터에서 말하는 객체지도란 도메인 모델을 비유한 말이라고 생각했다.

누군가 길을 물었을때 랜드마크를 언급하고, ‘여기에서 좌측으로, 우측으로 몇 미터 더 가세요’ 등 구체적이고 직접적으로 알려주는 방법도 있고, 지도를 건네주는 방법도 있겠다.

첫번째 방법은 재사용성이 매우 떨어진다. 애초에 물었던 목적지가 아닌, 다른 목적지로 가고 싶다면 다시 한번 질문을 해야 한다.

반면 지도를 건네는 두번째 방법은 재사용성면에서 첫번째 방법보다 낫다. 갑자기 목적지가 변경되더라도 대처할 수 있고, 시간에 흐름에 따라 변경 사항이 생긴다고 하더라도 지도의 전체적인 맥락은 유사할 것이기 때문이다.

따라서, 객체지도란 구조적인 측면 (도메인 모델)을 비유하는 예시라 생각하고 이번 챕터를 읽어보았다.

기능 설계 대 구조 설계

기능 설계란 사용자가 제품으로 무엇을 할 수 있는지에 초점을 맞추는 것이다.
반면에 구조 설계는 제품 형태가 어떠해야 하는지에 초점을 맞춘다.

따라서, 기능 설계와 구조 설계는 목적이 다르다.
설계를 잘하기 위해서는 기능 설계와 구조 설계를 조화롭게 만들어야 한다.
다음 내용을 통해 기능 설계와 구조 설계를 더 이해해보자!

두 가지 재료: 기능과 구조

기능이란 사용자에게 제공되는 시스템 서비스이다.
사용자는 자신의 목적을 달성하기 위해 기능을 사용한다.

구조란 사용자나 이해관계자들이 도메인에 대해 생각하는 개념과 개념들간의 관계이다.
예를 들어, 서비스의 개념, 규칙, 제약사항 등등이다.

객체지향 패러다임은 기능과 구조를 조화롭게 설계할 수 있도록 돕는다.
개개체지향 패러다임에서는 안정적인 구조를 기반으로 불안정한 기능을 추가하거나 변경한다.

잘 만들어진 구조란 사용자가 생각하는 멘탈 모델, 개발자가 생각하는 멘탈 모델 등이 일치하는 형태이다.
여기에서 멘탈 모델이란 서비스에 대해 이렇게 동작할 것이라고 생각하는 것을 의미한다.

아무튼 이렇게 여러 사람들이 생각하는 멘탈 모델이 서로 일치하기 위해서는 각 사람들이 떠올리는 객체의 모습이 실체와 유사해야 한다.

객체지향은 실세계의 모방이라 할 정도로 실세계의 객체를 은유로 하여 현실 세계를 능가하는 새로운 세계를 재창조하는 관점이므로,
사람들이 떠올린 멘탈 모델, 즉 도메인 모델과 유사하게 개발할 수 있다.

이를 연결 완전성 또는 표현적 차이 라고 한다.

안정적인 재료: 구조

구조를 왜 안정적인 재료라고 표현했을까?

해당 도메인에 대한 개념이나 규칙, 개념들간의 관계나 제약 사항은 비즈니스가 없어지지 않는 한 자주 변경되지 않기 때문이다.

(도메인이란 어떠한 문제를 해결하기 위한 대상 분야를 의미한다.)
그리고 도메인 모델이란 도메인에 대한 개념이나 규칙, 개념들간의 관계 및 제약 사항을 구조화한 것이다.
즉, 안정적인 재료인 구조에 해당한다.

도메인 모델은 잘 변하지 않기 때문에 도메인 모델을 기반으로 기능을 구현하는 방식을 사용한다.
기능은 추가되거나, 삭제되거나, 내부 구현이 변경될 수 있지만, 도메인 모델은 잘 변하지 않는다.
만약 기능을 기반으로 프로그래밍을 하면 기능에 변함에 따라서 어플리케이션이 전반적으로 흔들린게 된다!

불안정한 재료: 기능

기능은 요구 사항에 따라서 자주 변하기 때문에 불안정한 재료라고 표현한다.
기능 개발을 할때 사용자와 시스템간에 이뤄지는 모든 시나리오를 파악할 수 있어야 하기 때문에 유스케이스를 사용할 수 있다.

유스케이스는 사용자들의 목표를 중심으로 시스템의 기능적인 요구사항들을 이야기 형식으로 묶을 수 있다.
그저 기능 개발을 하는 것과의 차이점은, 각 개별적인 기능에 사용자 목표라는 문맥을 제공함으로써 각 기능이 유기적인 관계를 지닌 체계를 이룰 수 있게 한다는 점이다.

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

그렇다면 기능과 구조는 어떻게 통합할 수 있을까?

안정적인 구조(도메인 모델)를 기반으로 기능을 구현하면 된다!

댓글남기기