it 책/오브젝트: 코드로 이해하는 객체지향 설계

오브젝트: 코드로 이해하는 객체지향 설계 3장을 읽으며

lgvv 2024. 11. 9. 16:08

오브젝트: 코드로 이해하는 객체지향 설계 3장을 읽으며

 

느낀점

역할, 책임, 협력의 중요성에 대해 새롭게 이해하게 되었음. 특히 협력(collaboration)을 시작점으로, 이 협력 속에서 필요한 역할(role)을 정의하고, 적절한 객체(object)를 선택해 각 역할을 수행하게 하는 구조가 인상적이었음.
객체는 구체적으로 클래스를 인스턴스화한 존재로서, 역할에 따라 협력 속에서 유기적으로 연결되고 책임을 다하도록 설계된다는 점.

 

역할, 책임, 협력

객체지향 패러다임에서 핵심은 역할(role), 책임(responsibility), 협력(collaboration) 

  • 객체지향의 본질을 협력하는 개체들의 공동체를 창조하는 것.
  • 협력을 구성하기 위해 적절한 객체를 찾고 적절한 책임을 할당하는 과정에서 드러남
  • 역할, 책임, 협력이 제자리를 찾지 못한다면 응집도 높은 클래스와 중복 없느 상속 계층을 구현한다고 하더라도 애플리케이션이 침몰할 수 있음.
  • 협력:객체들이 애플리케이션의 기능을 구현하기 위해 수행하는 상호작용을 협력이라고 함.
  • 책임: 객체가 협력에 참여하기 위해 수행하는 로직을 책임이라고 부름
  • 역할: 객체들이 협력안에서 수행하는 책임들이 모여 객체가 수행하는 역할을 구성.

 

협력

객체는 고립된 존재가 아니라 기능이라는 더 큰 목표 달성을 위해 협력하는 사회적 존재

  • 객체의 협력은 다른 객체에 도움을 요청할 때 시작
  • 메시지 전송(message send)는 객체 사이의 협력을 위해 사용할 수 있는 유일한 커뮤니케이션 수단
  • 메시지를 수신한 객체는 메서드를 실행해 요청에 응답.
  • 객체를 자율적으로 만드는 가장 기본적인 방법은 내부 구현을 캡슐화하는 것 

 

협력이 설계를 위한 문맥 결정

상태는 객체가 행동하는 데 필요한 정보에 의해 결정되고 행동은 객체가 처리할 메시지로 결정됨.

  • 협력은 객체를 설계하는 데 필요한 일종의 문맥(context)를 제공

 

책임

협력에 참여하기 위해 객체가 수행하는 행동을 책임이라고 부름

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

 

책임 할당

자율적인 객체를 만드는 가장 기본적인 방법은 책임을 수행하는 데 필요한 정보를 전문가에 할당하는 것 

  • INFORMATION EXPERT(정보 전달) 패턴이라고 부름


책임 주도 설계

책임을 찾고 책임을 수행할 적절한 객체를 찾아 책임을 할당하는 방식으로 협력을 설계하는 방법

  • INFORMATION EXPERT(정보 전달) 패턴이라고 부름
  • 협력은 객체를 설계하기 위한 구체적인 문맥을 제공
  • 책임 주도 설계는 자연스럽게 객체의 구현이 아닌 책임에 집중할 수 있음.

 

메시지가 객체를 결정한다

객체에게 책임을 할당하는 데 필요한 메시지를 먼저 식별하고 메시지를 처리할 객체를 나중에 선택하는 것이 중요.

  • 최소한의 인터페이스(minimal interface)
    • 객체의 퍼블릭 인터페이스에 어떤 것도 추가하지 않기 땜문에 꼭 필요한 크기의 인터페이스를 가질 수 있음.
  • 추상적인 인터페이스(abstract interface)
    • 무엇(what)을 하는지 표현해야 하지만 어떻게(how) 수행하는지를 노출해서는 안됨.

 

행동이 상태를 결정한다

객체가 존재하는 이유는 협력에 참여하기 위해서

  • 객체 내부 구현에 초점을 맞춘 설계 방법을 데이터 주도 설계(Data-Dreven Design)이라고 한다.
  • 협력 관계 속에서 다른 객체에게 무엇을 제공해야 하고 다른 객체로부터 무엇을 얻어야 하는지를 고민해야 휼룡한 책임을 수확할 수 있음.
  • 상태는 단지 객체가 행동을 정상적으로 수행하기 위해 필요한 재료일 뿐


역할과 협력

역할의 구현

  • 역할의 구현은 가장 일반적으로 추상 클래스 인터페이스를 사용하는 것.

 

객체 대 역할

역할은 객체가 참여할 수 있는 일종의 슬롯

  • 적합한 책임을 수행하는 대상이 한 종류라면 간단하게 객체로 간주
  • 여러 종류의 객체들이 참여할 수 있다면 역할

협력(collaboration) --> reference --> 역할(role) --> select from --> 객체(object) -- instance of --> 클래스(class)

 

역할은 유연하고 확장 가능하며 일관된 구조를 가지는 시스템을 구축하는 데 매우 중요

  • 역할을 설계 중심 개념으로 보는 역할 모델링(Role Modeling)이라고 함