코드와 모델을 밀접하게 연관시키자
마틴 파울러의 객체지향 설계 안에 존재하는 세 가지 상호 연관된 관점
- 개념 관점
- 도메인 안에 존재하는 개념과 개념들 사이의 관계
- 도메인에 존재하는 문제를 해결하기 위해 개발됨
- 도메인의 규칙과 제약을 최대한 유사하게 반영
- 명세 관점
- 소프트웨어로 초점이 옮겨짐
- 객체들의 책임에 초점을 맞추게 됨(객체의 인터페이스를 바라봄)
- 구현 관점
- 객체들이 책임을 수행하는 데 필요한 동작하는 코드를 작성(how)
개념 관점, 명세 관점, 구현 관점은 동일한 클래스를 세 가지 다른 방향에서 바라보는 것.
클래스는 세 가지 관점을 모두 수용할 수 있도록 개념, 인터페이스, 구현을 함께 드러내야 한다.
목표
- 도메인 모델에서 시작해서 최종 코드까지의 구현 과정을 간략하게 설명
- 구현 클래스를 개념 관점, 명세 관점, 구현 관점에서 바라본다는 것의 의미를 설명
도메인 모델에서 최종 코드까지
- 문제에서 객체를 파악하고, 객체를 정의함
- 객체들 사이의 관계를 파악
- 도메인 모델을 작성
- 협력을 설계
- 메시지 찾기
- 메시지를 처리하기에 적합한 객체를 선택
- 객체가 받게 될 메시지를 정리
- 인터페이스로 변경
- 빠르게 구현하기
- 머릿속으로만 구상한 설계는 코드로 구현하는 단계에서 대부분 변경되기 때문에 설계에서 너무 많은 시간을 쏟지 말고, 최대한 빨리 구현해서 설계에 이상이 없는지, 설계가 구현 가능한지를 판단해야 함
- 일반적으로 구현하면서 설계를 수정하게 됨
코드의 세 가지 관점
개념 관점
현실세계의 Barista = 소프트웨어의 Barista 클래스
하는 일이 일치하면 이해하기가 쉬움. 일치할수록, 변경사항이 생겼을 때 뒤적거려야 하는 코드의 양이 줄어듦
명세 관점
인터페이스를 바라봄. 인터페이스와 구현을 분리해야 함. 변화에 탄력적인 인터페이스를 만들 수 있는 능력은 객체지향 설계자의 수준을 가늠하는 중요한 척도
구현 관점
클래스의 내부 구현을 바라봄. 메서드의 구현과 속성의 변경은 원칙적으로 외부의 객체에 영향을 미쳐서는 안 됨.
훌륭한 객체지향 프로그래머는 하나의 클래스 안에 세 가지 관점을 모두 포함하면서도 각 관점에 대응되는 요소를 명확하고 깔끔하게 드러낼 수 있다.
- 도메인 개념을 참조하는 이유
그 메시지를 수신할 객체를 어떻게 선택하는가? 도메인 개념 중에서 가장 적절한 것을 선택하는 것.
- 인터페이스와 구현을 분리하라
명세 관점과 구현 관점이 뒤섞여 머릿속을 함부로 어지럽히지 못하게 해야 한다. 명세 관점 → 클래스의 안정적인 측면을 드러내야 한다. 구현 관점→ 클래스의 불안정한 측면을 드러내야 한다.
세 가지 관점 모두에서 클래스를 바라볼 수 있으려면 훌륭한 설계가 뒷받침돼야 하는 것이다.
이 책 —> 어떻게 하면 객체지향적으로 설계할 수 있는지 알려주는 책.
나중에 한 번 더 읽고 전체적으로 요약해야 할 것이다.
'공부기록 > 객체지향' 카테고리의 다른 글
오브젝트 - 1장 객체, 설계(강추) (0) | 2021.09.12 |
---|---|
객체지향의 사실과 오해 - 다시 읽어보기 (0) | 2021.09.07 |
객체지향의 사실과 오해 - Chapter 6 객체 지도 (0) | 2021.06.18 |
객체지향의 사실과 오해 - Chapter 5 책임과 메시지 (0) | 2021.06.13 |
객체지향의 사실과 오해 - Chapter 4 역할, 책임, 협력 (0) | 2021.06.12 |