객체지향 설계 안에 존재하는세 가지 상호 연관된 관점에 관해 설명한다. 파울러는 세 가지 관점을 각각 개념 관점,명세 관점, 구현 관점이라고 부른다.
<aside> 💡 개념 관점(Conceptual Perspective): 설계는 도메인 안에 존재하는 개념과 개념들 사이의 관계를 표현.
이 관점은 사용자가 도메인을 바라보는 관점을 반영한다. 따라서 실제 도메인의 규칙과 제 약을 최대한 유사하게 반영하는 것이 핵심이다.
</aside>
<aside> 💡 명세 관점(Specification Perspective): 소프트웨어 안에서 살아 숨쉬는 객체들의 책임에 초점
즉, 객체의 인터페이스를 바라보게 된다. 명세 관점에서 프로그래머는 객체가 협력을 위해 ‘무엇’을 할 수 있는가에 초점을 맞춘다
</aside>
<aside> 💡 구현 관점(implementation Perspective): 객체들이 책임을 수행하는 데 필요한 동작하는 코드를 작성
책임을 ‘어떻게’ 수행할 것인가에 초점을 맞추며 인터페이스를 구현하는 데 필요한 속성과 메서드를 클래스에 추가한다.
</aside>
개념 관점, 명세 관점, 구현 관점은 동일한 클래스를 세 가지 다른 방향에서 바라보는 것을 의미한다.
클래스가 은유하는 개념은 도메인 관점을 반영한다. 클래스의 공용 인터페이스는 명세 관점을 반영 한다. 클래스의 속성과 메서드는 구현 관점을 반영한다.
클래스는세 가지 관점을 모두 수용할 수 있도록 개념, 인터페이스, 구현을 함께 드러내야 한다. 동시에 코드 안에서 세 가지 관점을 쉽게 식별할 수 있도록 깔끔하게 분리해야 한다.
커피 전문점 안에는 메뉴판이 존재한다. 메뉴판에는 아메리카노, 카푸치노, 카라멜 마키아또, 에스프레소의 네 가지 커피 메뉴가 적혀 있다.
메뉴판은 네 개의 메뉴 항목 객체들을 포함하는 객체라고 볼 수 있다.
손님 객체는 메뉴판 객체 안에 적힌 메뉴 항목 객체들 중에서 자신이 원하는 메뉴 항목 객체 하나를 선택해 바리스타 객체에게 전달할 것이다.
바리스타는 주문을 받은 메뉴에 따라 적절한 커피를 제조한다. 바리스타는 자율적으로 커피를 제조하는 객체로 볼 수 있으며, 바리스타가 제조하는커피 역시 메뉴판, 메뉴 항목, 바리스타와 구별되는 자신만의 경계를 가지므로 객체로 볼 수 있다.