flagtags / OOP-study

0 stars 0 forks source link

7장. 함께 모으기 #7

Open kkirico opened 6 months ago

kkirico commented 6 months ago

7장

객체지향에는 세가지 관점이 있다

커피 전문점 도메인

커피 전문점 도메인

객체를 인식한다.(손님, 메뉴, 바리스타, 아메리카노 메뉴, 카페라떼 메뉴, 메뉴항목, 아메리카노, 카페라떼)

타입을 분류한다.(손님, 메뉴, 바리스타, 커피, 메뉴항목)

상태와 무관하게 동일하게 행동할 수 있는 객체들은 동일한 타입의 인스턴스로 분류 할 수 있다.

어떤 타입이 어떤 도메인을 구성하느냐와 타입들 간에 어떤 관계가 존재하는지 파악해서 도메인을 이해한다.

협력 찾기

첫번째 협력을 찾는다(커피 주문하기)

첫 번째 협력 메시지를 처리할 객체를 찾는다(손님)

객체가 스스로 할 수 없는 일을 찾아서

메시지를 구성하고

메시지의 책임을 수행할 객체를 찾는다.

메시지가 객체를 선택하고, 선택된 메시지를 자신의 인터페이스로 받아들인다.

수신 가능한 메시지를 추려내어, 인터페이스를 만든다.

구현하기

코드의 세가지 관점

명세 관점은 클래스의 인터페이스를 바라본다. 변화에 안정적인 인터페이스를 만들기 위해서는 인터페이스와 구현을 분리해야한다.

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

도메인 개념 중에서 가장 적절한 것을 선택하여 메시지를 수신하도록 하면 코드의 구조와 의미를 쉽게 유추할 수 있다. 이것이 시스템의 유지보수성을 높인다.

설계는 변경을 위해 존재한다.

j03y14 commented 6 months ago

객체지향 설계의 세가지 관점

  1. 개념 관점: 도메인
  2. 명세 관점: 소프트웨어의 객체 관점. 인터페이스 관점
  3. 구현 관점 : 코드 관점

클래스는 세가지 관점을 모두 수용할 수 있어야 한다.

커피 전문점 도메인으로 보는 예시

도메인으로 객체를 구성. 객체들간의 관계를 알아본다. 동적인 객체를 정적인 타입으로 추상화 타입과 타입간의 관계를 나타낸다.

메세지를 선택한다. 최초의 시스템의 메세지부터 시작한다. 메세지를 처리할 객체를 도메인 모델 안의 타입에서 찾는다. 인터페이스를 만든다.

구현한다.

order에서 매개변수에 바리스타가 있는데, 이건 메세지이다. 그런데 바리스타를 매개변수에 넣는건 구현관점으로 볼 수 있지 않을까..?

코드와 세가지 관점

코드는 세가지 관점을 모두 제공해야 한다.

도메인 관점에서 코드를 바라보면, 도메인의 중요한 개념과 관계를 반영한다. 명세관점에서 보면 클래스의 인터페이스를 바라본다. 구현 관점은 클래스의 내부 구현을 바라본다.

클래스에서 이 세가지 관점을 모두 읽기 쉽게 구현해야 한다.

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

도메인 안헤서 적절한 객체를 선택하면 코드의 구조와 의미를 쉽게 유추할 수 있다. 변화에 쉽게 대응할 수 있다.

인터페이스와 구현을 분리하는 것은 중요하다.