객체 지향으로 가야하는 이유
객체지향 개발 방법은 안정적인 구조에 변경이 빈번하게 발생하는 기능을 종속시키는 지도의 방법과 유사하다. 이것이 객체지향이 과거의 전통적인 방법보다 범용적이고, 재사용성이 높으며, 변경에 안정적인 이유다.
성공적인 소프트웨어들이 지닌 공통적인 특징
훌륭한 기능이 훌륭한 소프트웨어를 만드는 충분조건이라고 한다면, 훌륭한 구조는 훌륭한 소프트웨어를 만들기 위한 필요조건이다. 성공적인 소프트웨어들이 지닌 공통적인 특징은 훌륭한 기능을 제공하는 동시에 사용자가 원하는 새로운 기능을 빠르고, 안정적으로 추가할 수 있다는 것이다.
미래에 대한 대비
미래의 변경을 예측할 수는 없다. 단지 대비할 수 있을 뿐이다. 미래에 대비하는 가장 좋은 방법은 변경을 수용할 수 있는 선택의 여지를 설계에 마련해 놓는 것이다. 좋은 설계는 나중에라도 변경할 수 있는 여지를 남겨놓는 설계이다. 설계를 하는 목적은 나중에 설계하는 것을 허용하는 것이며, 설계의 일차적인 목표는 변경에 소요되는 비용을 낮추는 것이다.
두 가지 재료: 기능과 구조
객체지향 세계를 구축하기 위해서는 사용자에게 제공할 기능과 기능을 담을 안정적인 구조라는 재료가 준비되어 있어야 한다.
- 구조는 사용자나 이해관계자들이 도메인에 관해 생각하는 개념과 개념들 사이의 관계로 표현한다.
- 기능은 사용자의 목표를 만족시키기 위해 책임을 수행하는 시스템의 행위로 표현한다.
도메인과 도메인 모델
- 사용자가 프로그램을 사용하는 대상 분야를 도메인이라고 한다.
- 도메인 모델이란 사용자가 프로그램을 사용하는 대상 영역에 관한 지식을 선택적으로 단순화하고 의식적으로 구조화한 형태이다. 즉, 소프트웨어가 목적하는 영역 내의 개념과 개념 간의 관계, 다양한 규칙이나 제약 등을 주의깊게 추상화한 것이다.
예를들어, 은행 업무에 종사하는 사람들은 은행 도메인을 고객과 계좌 사이의 돈의 흐름으로 이해하는 것과 같다.
불안정한 기능을 담는 안정적인 도메인 모델
도메인 모델의 핵심은 사용자가 도메인을 바라보는 관점을 반영해 소프트웨어를 설계하고 구현하는 것이다. 그 이유는 사용자들이 누구보다도 도메인의 본질적인 측면을 가장 잘 이해하고 있기 때문이다. 사용자들은 도메인을 구성하는 중요한 개념과 개념 간의 관계를 잘 알고있는 사람들이다. 그리고 사용자 모델에 포함된 개념과 규칙은 비교적 변경될 확률이 적기에 사용자 모델을 기반으로 설계와 코드를 만들면 변경에 쉽게 대처할 수 있을 가능성이 커진다. 이 것은 곧 도메인 모델이 기능을 담을 수 있는 안정적인 구조를 제공할 수 있음을 의미하며, 이 안정적인 구조를 기반으로 자주 변경되는 기능을 배치함으로써 기능의 변경에 대해 안정적인 소프트웨어를 구현할 수 있는 것이다.
따라서
도메인 모델은 비즈니스의 개념과 정책을 반영하는 안정적인 구조를 제공하는 궁극정인 지도라고 할 수 있다.
객체지향 설계자가 갖춰야 할 기본적인 설계 능력
불안정한 기능을 안정적인 구조 안에 담음으로써 변경에 대한 파급효과를 최소화하는 것은 훌륭한 객체지향 설계자가 갖춰야 할 기본적인 설계 능력이다. 변경에 유연한 소프트웨어를 만들기 위해서는 유스케이스에 정리된 시스템의 기능을 도메인 모델을 기반으로 한 객체들의 책임으로 분배해야 한다. 즉, 도메인 모델은 구조를, 유스케이스는 협력의 출발점인 시스템 책임을 제공한다.
'책 - 요약 정리 > 객체지향의 사실과 오해' 카테고리의 다른 글
05. 책임과 메시지 (0) | 2023.09.04 |
---|---|
03. 타입과 추상화 (0) | 2023.09.03 |