[객사오] 객체지향 설계 (3)

Hashswim·2024년 7월 20일
0

어떤 객체도 섬이 아니다.
우리 모두를 합친 것보다 더 현명한 사람은 없다.

협력

요청과 응답으로 연결되는 객체들의 네트워크

객체가 자신에게 할당된 책임을 혼자서 수행하기 어렵다면 문제를 해결하는데 필요한 지식을 알고 있거나 도움을 줄 수 있는 다른 객체에게 도움을 요청한다

요청을 받은 객체는 일을 처리한 후 요청한 사람에게 필요한 지식이나 서비스를 제공하는 것으로 응답하며 협력이 이루어진다
-> 요청과 응답으로 시작되는 협력!!

(요청을 받은 객체도 혼자서 일을 처리하기 어렵다면 또 다른 적절한 객체에게 도움을 요청한다)
-> 협력은 전체적으로 다수의 요청과 응답의 연쇄적인 흐름으로 구성된다.

책임

객체에 의해 정의되는 응집도 있는 행위의 집합으로 요청을 처리하기 위해 객체가 수행하는 행동

객체지향의 세계에서는 어떤 객체가 어떤 요청에 대해 대답해 줄 수 있거나, 적절한 행동을 할 의무가 있는 경우 해당 객체가 책임을 가진다고 말한다..

책임의 두가지 분류

  • 하는 것
    - 객체를 생성하거나 계산을 하는 등의 스스로 하는것
    • 다른 객체의 행동을 시작시키는 것
    • 다른 객체의 활동을 제어하고 조절하는 것(어디까지나 요청)
  • 아는 것
    - 개인적인 정보에 관해 아는 것
    • 관련된 객체에 관해 아는 것
    • 자신이 유도하거나 계산할 수 있는 것에 관해 아는 것

⭐️ 적절한 객체에게 적절한 책임을 할당하는 것이 객체지향의 품질을 결정

적절한 책임?
:객체의 자율성을 보장할 수 있을 정도로 충분히 추상적이면서 협력의 의도를 뚜렷하게 표현할 수 있을정도로 충분히 구체적

ex) 재판에서 판사가 증인에게 요청을 하는 상황

  • 설명하라
    : 객체가 무엇을 설명해야 하는지 너무 포괄적임

  • 목격했던 장면을 떠올리고 떠오르는 기억을 시간 순서대로 재구성해서 말로 간결하게 표현하라
    : 판사는 어떤 방식이든 증언만 할 수 있다면 충분하므로 증인의 자율성을 침해함

  • 증언하라
    : 증인의 자율성을 충분히 보장하면서 증인이 해야할 일을 명확하게 지시하는 적절한 책임

    -> 어떻게가 아니라 무엇을 해야하는지를 설명하는 책임이 자율적인 책임!

메시지

객체의 책임은 다른 객체로부터 요청을 받았을 때 생성된다.

한 객체가 다른 객체에게 요청을 할 수 있는 방법은 오직 '메시지 전송'뿐이다.

이때 메시지 전송을 하는 객체: 송신자
메시지를 받아 요청을 처리하는 객체: 수신자

책임과 메시지의 수준이 항상 같지는 않다.
(책임은 여러개의 메시지로 분할되어 요청되는 것이 일반적!)

결국 메시지는 책임을 의미한다..!

메서드: 메시지를 처리하기 위해 내부적으로 선택하는 방법

인터페이스

두 객체가 마주하는 부분에서 서로 상호작용 할 수 있도록 이어주는 방법이나 장치

인터페이스의 특징

  • 사용법을 익히기만 하면 내부 구조나 동작 방식을 몰라도 사용가능
  • 인터페이스 자체는 변경하지 않고 내부가 변경되어도 사용자에게 영향을 미치지 않음
  • 대상이 변경되어도 동일한 인터페이스를 제공한다면 똑같이 상호작용 가능

객체 인터페이스는 객체가 수신할 수 있는 메세지(유일한 상호작용 방법)의 목록!

외부에서 접근하는 인터페이스: 공용 인터페이스
객체의 내부 구조와 작동방식: 구현(사적 인터페이스+행동, 상태)
사적 인터페이스: 내부에서 접근하는 인터페이스

⭐️인터페이스와 구현의 분리 원칙
객체의 자율성을 위해 캡슐화를 통해 내부와 외부를 분리한다.

캡슐화: 구현을 외부로부터 감추는 것

캡슐화의 두가지 관점

  • 상태와 외부에 응답할 수 있는 행동을 은닉하는 데이터 캡슐화
  • 사적이고 불안정한 비밀을 은닉하는 사적인 비밀의 캡슐화

내부와 외부를 분리함으로써 단순하고 유연하고 변경이 쉬운 설계가능

역할

협력 내에서 다른 객체로 대체할 수 있음을 나타내는 일종의 표식

재사용 가능하고 유연한 객체지향 설계를 위한 구성요소

협력의 주체를 제외한 과정이 유사해서 협력 자체를 재사용하고 싶다..!
-> 협력의 주체를 수행하는 객체 자체가 아닌 수행하는 역할로 보자!

ex) 여왕이 토끼에게 목격자를 불러오라는 협력 -> "판사"가 "증인"에게 목격자를 불러오라는 협력
목격자를 불러오라는 다른 협력 상황이나 목격자가 여러번 변경 될 때 협력을 재사용할 수 있다.

핵심은 대체가능성으로 동일한 책임을 수행 할 수 있어야 한다!

0개의 댓글