읽은 책 정리/객체지향의 사실과 오해

06 객체 지도

포포015 2021. 9. 15. 23:15

자주변경되는 기능이 아니라,

안정적인 구조를 따라 역할,책임,협력을 구성하라.

 

길을 찾는 나그네

길을 찾는나그네가 있다. 나그네는 두가지 방법으로 길을 찾고있다.

  1. 길을 직접 사람에게 물어보는 방법 (기능적이고, 해결방법 지향적인 접근법)                                                      (재사용성이 떨어진다. A에서 B로 변경하려면 B의 길을 아는사람을 또찾아야함.)
  2. 지도를 이용하는방법 , 지도는 길을 찾는데 필요한 구체적인 기능이 아니라, 길을 찾을수 있는 '구조'를 제공            ( 구조적이고 문제 지향적인 접근법)                  

지도(구조적)는 요구사항이 변경되어도 수용가능하나, 사람에게 길을 물어봐서(기능적) 길을 찾는건 수용이 불가능하다.

 

* 기능을 중심으로 구조를 종속시키는 접근법은 범용적이지않고,

재사용이 불가능하며 변경에 취약한 모델을 낳게된다.

(소프트웨어의 세계는 폐기되지 않는 한 요구사항이 계속 바뀐다.)

 

* 안정적인 구조를 중심으로 기능을 종속시키는 접근법은, 범용적이고 재사용이 가능하며,

변경에 유연하게 대처할수 있는 모델을 만든다.

 

소프트웨어의 설계 2가지 측면

  1. 기능 측면설계 -> 제품이 사용자를 위해 무엇을 할수 있는가?
  2. 구조 측면설계 -> 제품의 형태가 어떠해야하는지 초점

* 설계의 가장큰 도전은 기능과 구조라는 두가지 측면을 함께 녹여 조화를 이루도록 만드는것이다.

 

* 성공적인 소프트웨어들이 지닌 공통적인 특징은 훌륭한 기능을

제공하는 동시에 사용자가 원하는 새로운기능을 빠르고 안정적으로 추가할수있다

 

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

미래에 대비하는 가장 좋은 방법은 변경을 예측하는것이 아니라,

변경을 수용할수 있는 선택의 여지를 설계에 마련해 놓는것이다.

 

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

(객체지도는 안정적이며, 재사용이 가능하면서도 범용적이다.

지도를 보고 필요할때 A에 적혀있는 지도를 찾아 가면되고 B로 갈땐 B로 지도를 찾아서 가면된다.)

 

두가지 재료 기능과 구조

객체지향 세계를 구축하기 위해서는 사용자에게 제공할 '기능'과 기능을 담을 안정적인 '구조' 라는

재료가 준비 돼있어야한다.

 

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

 

도메인 모델링

사용자가 프로그램을 사용하는 대상 영역에 관한 지식을 선택적으로, 단순화하고 의식적으로 구조화 한 형태.

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

 

예로 들자면 은행 종사자들은 은행 도메인을 고객과 계좌 사이의 돈의 흐름으로 이해할것이고

중고차 판매원은 구매되는 자동차와 판매되는 자동차의 교환으로 자동차 도메인을 바라볼것이다.

 

  • 도메인 -> 사용자가 프로그램을 사용하는 대상분야
  • 모델 -> 대상을 단순화해서 표현한것.( 지식을 선택적으로 단순화하고 의식적으로 구조화한 형태)

복잡성의 바다에서 길을 잃지 않고, 중요한 문제에 집중할수 있도록 

필요한 지식만 재구성한것 (대상을 추상화하고 단순화한것.) 

복잡성을 관리하기 위해 사용하는 기본적인 도구이다.

 

 

표현적차이

소프트웨어 객체는 현실 객체를 모방한것이 아니라, 은유를 기반으로 재창조한것이다.

(따라서 소프트웨어 객체는 현실 객체가 갖지못한 특성을 가질수도 있고, 현실객체가 하지못하는 행동도 할수있다.)

 

*핵심은 은유를 통해 현실 객체와 소프트웨어 객체 사이의 차이를 최대한 줄이는것이다.

은유를 투영해야하는 대상은 사용자가 도메인에 생각하는 개념들이다.

(도메인 모델을 기반으로 설계하고 구현하는것은 사용자가 도메인을 바라보는 관점을 그대로 코드에 반영할수 있게한다.

사용자 모델을 기반으로 설계와 코드를 만들면 변경에 쉽게 대처할수 있을 가능성이 커진다.

 

 

 

정리

  1. 요구사항들을 식별하고 도메인 모델을 생성한후 요구사항을 충족하기 위해 객체들 간의 메시지 전송을 정의하자.
  2. 안정적인 도메인 모델을 기반으로 시스템의 기능을 구현하자
  3. 도메인 모델과 코드를 밀접하게 연관시키기 위해 노력하자.

(이것이 유지보수하기 쉽고, 유연한 객체지향 시스템을 만드는 첫걸음이다.)

'읽은 책 정리 > 객체지향의 사실과 오해' 카테고리의 다른 글

07 함께 모으기  (1) 2021.09.15
05 책임과 메시지  (1) 2021.09.15
04 역할, 책임, 협력  (0) 2021.09.15
03 타입과 추상화  (0) 2021.09.12
02 이상한 나라의 객체  (1) 2021.09.11