본문 바로가기

카테고리 없음

[TIL] 24.05.18 SAT

#객사오

- 7장

객체지향 설계와 연관된 세가지 관점

- 개념관점: 설계는 도메인안에 존재하는 개념과 개념들 사이의 관계(사용자가 도메인을 바라보는 관점)

    -> 실제 도메인의 규칙과 제약을 유사하게 반영하는것이 핵심

- 명세관점: 소프트웨어상의 객체의 책임에 초점, 객체의 인터페이스를 바라보며 협력을 위해 무엇을 할 수 있는지 설계

- 구현관점: 실제 코딩; 객체들이 책임을 수행하는데 필요한 동작하는 코드를 작성하는 것; 객체의 책임을 어떻게 수행할 것인가에 초점, 속성과 메서드를 구현

 

세 가지 관점 모두 수용할 수 있도록 개념, 인터페이스, 구현을 함께 드러내도록 분리해 설계해야 한다.

 

1. 개념관점에서 도메인 모델을 설계 (구체적으로 관계를 표현하도록 UML을 그릴 필요까진 없다 중요한것은 어떤 타입이 도메인을 구성하고 타입들 사이에 어떤 관계가 존재하는지를 파악하기만 하면 된다)

 

2. 명세 관점에서 협력을 구성하도록 메시지를 구성하고 인터페이스를 설계한다;

커피를 주문하라는 메시지 -> 도메인 모델중 손님의 타입이 수행할 수 있을것, 커피를 주문하라(메뉴 이름)의 형식으로 메시지를 설계,

손님은 메뉴를 모른다, 메뉴항목을 찾으라는 메시지 -> 메뉴판이 메뉴를 알고 있으므로 메뉴판에게 책임 할당, 메뉴항목을 찾아라(메뉴 이름) -> (메뉴 항목)의 메시지 설계

과정을 반복하며 객체의 종류와 책임, 메시지에대한 윤곽을 잡는다

 

3. 메시지를 정제함으로써 각 객체의 인터페이스를 구현 가능할 정도로 상세화한다.

(객체들의 협력은 동적으로 묘사한 모델, 실제 소프트웨어구현은 동적인 객체가 아닌 정적인 타입이므로 객체들을 포괄하는 타입을 정의한 후 식별된 오퍼레이션을 타입의 인터페이스에 추가한다)

 

ex)

class CUstomer {

    public void order(String menuName) {}

}

 

4. 클래스의 인터페이스를 식별했으므로 오퍼레이션을 수행하는 방법을 메서드로 구현한다.

(구현 도중에 객체의 인터페이스가 변경 될 수 있다; 설계는 구현을 위한 스케치를 작성하는 단계로 구현 그 자체는 아니다. 중요한 것은 설계가 아닌 코드!, 코드를 통한 피드백으로 깔끔한 설계를 얻을 수 있다.)

 

핵심은 명세관점(인터페이스)과 구현관점(구현)을 분리하는 것/