Skip to content

Latest commit

 

History

History
89 lines (47 loc) · 2.63 KB

File metadata and controls

89 lines (47 loc) · 2.63 KB

객체지향의 사실과 오해 7장

파울러의 3가지 관점

개념 관점 (도메인)

설계는 도메인 안에 존재하는 개념과 개념들 사이의 관계

명세 관점 (인터페이스)

사용자 영역인 도메인을 벗어나 개발자의 영역인 소프트웨어로 초점을 잡음

도메인 개념이 아닌 소프트웨어 안에서 살아 숨쉬는 객체들의 책임에 초점을 잡음

프로그래머는 객체가 협력을 위해 무엇을 할 수 있는가?에 초점을 잡음

💡 인터페이스와 구현을 분리해야 한다.

구현 관점 (클래스의 속성과 메서드)

프로그래머에게 가장 익숙한 관점

객체들이 책임을 수행하는 데 필요한 동작을 하는 코드를 작성하는 것

목표

  • 도메인 모델에서 시작해서 최종 코드까지의 구현 과정
  • 구현 클래스를 개념, 명세, 구현 관점에서 바라본다는 것은?

도메인 : 커피 전문점

판매 품목 : 아메리카노, 카푸치노, 카라멜 마끼아또, 에스프레소

객체 분류 : 메뉴판, 손님, 바리스타, 커피, 메뉴 항목

도메인 모델 : 도메인을 단순화해서 표현한 모델

스크린샷 2022-12-10 오후 11 19 10

💡 도메인 안에 어떤 관계가 존재하는지 파악 중요

객체가 메시지를 선택한다. ❌

메시지가 객체를 선택한다. ✅

코드의 3가지 관점

개념 관점

Customer, Menu, MenuItem, Barista, Coffee

명세 관점

클래스의 인터페이스

구현 관점

클래스 내부의 비밀 ( 메서드와 속성)

💡 3가지 관점을 명확하게 분리하도록!

도메인 개념을 참조하는 이유

메시지를 수신할 객체를 어떻게 선택하는가?

  • 도메인 개념중에서 가장 적절한 것을 선택한다. (시스템 유지보수성 중요)
💡 소프트웨어는 항상 변한다, 어러 개의 클래스로 기능을 분할하고 클래스 안에서 인터페이스와 구현을 분리하는 이유는 변경이 발생했을 때 코드를 좀 더 수월하게 수정하도록

인터페이스와 구현을 분리하라

명세 관점은 클래스의 안정적인 측면을 드러내야 한다.

구현 관점은 클래스의 불안정한 측면을 드러내야 한다.

명세 관점과 구현 관점을 명확하게 분리해야 한다.