선생님, 개발을 잘하고 싶어요.

[오브젝트] 챕터 3 - 역할, 책임, 협력 본문

일상/책 리뷰

[오브젝트] 챕터 3 - 역할, 책임, 협력

알고싶은 승민 2022. 3. 1. 23:20

역할과 책임의 구분이 명확히 이해되지 않습니다.

작은 프로젝트나 쉽게 변경될 수 있는 서비스 코드, 특히 UI를 만드는 입장에서 역할 처럼 구현체의 Slot 처럼 동작하는 게 필요할지 의문입니다.

전체적으로 추상적인 내용이였다고 생각합니다만, 코드를 짤 때 역할, 책임, 협력을 좀 생각해보게 되는 것 같습니다.

아, 그나저나 협력의 과정에서 다른 객체에게 단순히 메시지를 보낸다는 개념은 너무 좋은 것 같습니다. 서버 객체 레벨에서 캡슐화를 얘기할 때는 감이 잘 안왔는데, 클라이언트 객체가 메시지를 보낸다는 개념을 생각하니 클라이언트 입장에서 서버의 세부 구현이 캡슐화 된 것이더군요. 


  • 객체지향 패러다임의 관점에서 핵심은 역할, 책임, 협력 (role, responsibility, collaboration)
  • 본질은 협력하는 개체들의 공동체를 창조하는 것
    • 협력을 구성하기 위해 적절한 객체를 찾고 적절한 책임을 할당하는 과정에서 드러난다.
  • 너무 이른 시기에 구현에 초점을 맞추는 것은 변경하기 어렵고 유연하지 못한 코드를 낳는 원인
  • 협력
    • 다양한 객체가 기능을 구현하기 위해서 메시지를 주고받으며 상호작용
      • 상호작용 → 협력
      • 협력에 참여하기 위해 수행하는 로직 → 책임
      • 협력 안에서 객체가 수행하는 책임이 모여 → 역할
    • 협력은 객체지향 세계에서 기능을 구현할 수 있는 유일한 방법이다.
    • 메시지 전송은 객체 사이의 협력을 위해 사용할 수 있는 유일한 커뮤니케이션 수단이다.
    • 객체를 자율적으로 만드는 가장 기본적인 방법은 내부 구현을 캡슐화하는 것이다.
      • 변경의 파급 효과 제한
      • 변경이 쉬워진다.
    <aside> 💡 객체가 가질 수 있는 상태와 행동은 어떤 기준으로 결정해야할까?</aside>
    • 객체는 협력에 필요한 적절한 행동을 보유해야한다.
    • 협력 없이 객체의 행동과 상태를 결정하는건 무의미하다.
  • → 답은 협력이다.
  • 객체를 설계할 때 어떤 행동과 상태를 할당했다면 그 이유는 무엇인가?
  • 책임
    • 협력에 참여하기 위해 객체가 수행하는 행동
    • 객체가 유지하는 정보와 수행할 수 있는 행동에 대해 개략적으로 서술한 것
    • 하는 것(doing), 아는 것(knowing) 로 분류한다.
    • 협력 안에서 객체에게 할당한 책임이 외부의 인터페이스와 내부의 속성을 결정한다.
    • 객체가 수행할 수 있는 행동을 종합적이고 간략하게 서술 → 메시지보다 추상적이고 큰 개념
    • 객체지향에서 가장 중요한 능력은 책임을 능숙하게 객체에 할당하는 것이다.
    • 객체의 구현 방법은 상대적으로 책임보다는 덜 중요하며 책임을 결정한 다음에 고민하자.
    • 책임 할당
      • 정보 전문가 패턴: 책임을 수행하는 데 필요한 정보를 가장 잘 알고있는 전문가에게 그 책임을 할당하자.
      • 출발점 → 시스템이 사용자에게 제공하는 기능을 시스템이 담당할 하나의 책임으로 바라보는 것.
      • 결과물은 시스템을 구성하는 객체의 인터페이스와 오퍼레이션 목록
      • 기본적인 전략은 책임을 수행할 정보 전문가를 찾는 것
    • 책임 주도 설계
      • 책임을 찾고 → 책임을 수행할 적절한 객체를 찾고 → 책임을 할당하는 방식으로 → 전체 협력을 설계하는 방법
      • 책임을 할당할 때 고려할 두가지
        1. 메시지가 객체를 결정한다.
          1. “예매하라”라는 메시지가 필요! → Screening이 적절하겠군
        2. 행동이 상태를 결정한다.
  • 역할
    • 다른 것으로 교체할 수 있는 책임의 집합
    • 역할은 일종의 추상화
    • 동일한 책임을 수행하는 역할을 기반으로 여러 협력을 하나로 통합할 수 있다.
    • 다양한 종류의 객체를 수용할 수 있는 일종의 슬롯
    • 구체적인 객체 타입을 캡슐화하는 추상화
    • 객체에게 중요한 건 행동이고, 역할은 객체를 추상화해, 협력에 초점을 맞출 수 있게 한다.
    • 객체 대 역할
      • 역할이란 적절한 객체로 메워 넣을 수 있는 하나의 슬롯으로 생각할 수 있다.
      • 설계 초반 → 적절한 책임과 협력의 큰그림을 탐색이 중요, 역할과 객체를 명확히 구분하는 것은 그다지 중하지 않음.
      • 협력을 위해 어떤 책임이 필요한지 이해하는 게 중요하다.
      • 다양한 객체가 협력에 참여한다는 게 확실하면 역할로 시작
      • 잘 모르겠다면 구체적인 객체로 시작, 나중에 협력을 정제하다 유사한 구조를 보일 때 추출
    • 역할의 가장 큰 장점을 설계의 구성 요소를 추상화할 수 있다는 것
    • 협력의 관점에서는 세부적인 사항을 무시하고 추상화에 집중하는 것이 유용하다.
  • 객체 역시 여러 협력에 참여하면서 다양한 역할을 수행할 수 있다.
Comments