설계는 도메인 안에 존재하는 개념과 개념들 사이의 관계
사용자 영역인 도메인을 벗어나 개발자의 영역인 소프트웨어로 초점을 잡음
도메인 개념이 아닌 소프트웨어 안에서 살아 숨쉬는 객체들의 책임에 초점을 잡음
프로그래머는 객체가 협력
을 위해 무엇을 할 수 있는가?에 초점을 잡음
프로그래머에게 가장 익숙한 관점
객체들이 책임을 수행하는 데 필요한 동작을 하는 코드를 작성하는 것
목표
- 도메인 모델에서 시작해서 최종 코드까지의 구현 과정
- 구현 클래스를 개념, 명세, 구현 관점에서 바라본다는 것은?
도메인 : 커피 전문점
판매 품목 : 아메리카노, 카푸치노, 카라멜 마끼아또, 에스프레소
객체 분류 : 메뉴판, 손님, 바리스타, 커피, 메뉴 항목
도메인 모델 : 도메인을 단순화해서 표현한 모델
💡 도메인 안에 어떤 관계가 존재하는지 파악 중요객체가 메시지를 선택한다. ❌
메시지가 객체를 선택한다. ✅
Customer, Menu, MenuItem, Barista, Coffee
클래스의 인터페이스
클래스 내부의 비밀 ( 메서드와 속성)
💡 3가지 관점을 명확하게 분리하도록!메시지를 수신할 객체를 어떻게 선택하는가?
- 도메인 개념중에서 가장 적절한 것을 선택한다. (시스템 유지보수성 중요)
명세 관점은 클래스의 안정적인 측면을 드러내야 한다.
구현 관점은 클래스의 불안정한 측면을 드러내야 한다.
명세 관점과 구현 관점을 명확하게 분리해야 한다.