시배's Android

객체지향의 사실과 오해 | 4장. 역할, 책임, 협력 본문

Book/객체지향의 사실과 오해

객체지향의 사실과 오해 | 4장. 역할, 책임, 협력

si8ae 2023. 12. 25. 13:11
  • 요청에 대해 적절한 방식으로 응답하는 데 필요한 지식과 행동 방식을 가지고 있기 때문이다.
  • 요청과 응답은 협력에 참여하는 객체가 수행할 책임을 정의한다.
  • 객체지향 개발에서 가장 중요한 능력은 책임을 능숙하게 소프트웨어 객체에 할당하는 것이다.
  • 객체의 책임은 객체가 무엇을 알고 있는가와 무엇을 할 수 있는가로 구성된다.
  • 책임은 객체의 외부에 제공해 줄 수 있는 정보와 외부에 제공해 줄 수 있는 서비스의 목록이다.
  • 책임은 객체의 공용 인터페이스를 구성한다.
  • 두 객체 간의 협력은 메시지를 통해 이뤄진다.
  • 설계를 시작하는 초반에는 어떤 객체가 어떤 책임을 가지고 어떤 방식으로 서로 협력해야 하는지에 대한 개요를 아는 것만으로도 충분하다.
  • 어떤 객체가 수행하는 책임의 집합은 객체가 협력 안에서 수행하는 역할을 암시한다.
  • 역할을 사용하면 협력을 모두 포괄할 수 있는 하나의 협력으로 추상화할 수 있다.
  • 역할은 협력 내에서 다른 객체로 대체할 수 있음을 나타내는 일종의 표식이다.
  • 역할을 대체하기 위해서는 각 역할이 수신할 수 있는 메시지를 동일한 방식으로 이해해야 한다.
  • 역할은 객체지향 설계의 단순선, 유연성, 재사용성을 뒷받침하는 핵심 개념이다.
  • 역할의 가장 큰 가치는 하나의 협력 안에 여러 종류의 객체가 참여할 수 있게 함으로써 협력을 추상화할 수 있다는 것이다.
  • 역할은 협력 안에서 구체적인 객체로 대체될 수 있는 추상적인 협력자다. 
  • 본질적으로 역할은 다른 객체에 의해 대체 가능함을 의미한다.
  • 객체가 가져야 하는 상태와 행위에 대해 고민하기 전에 그 객체가 참여할 문맥인 협력을 정의하라
  • 객체지향 시스템의 목적은 사용자의 요구를 만족시킬 수 있는 기능을 제공하는 동시에 이해하기 쉽고, 단순하며, 유연한 상호작용을 제공하는 객체들의 공동체를 구축하는 것이다.
  • 객체지향 설계란 애플리케이션의 기능을 구현하기 위한 협력 관계를 고안하고, 협력에 필요한 역할과 책임을 식별한 후 이를 수행할 수 있는 적절한 객체를 식별해 나가는 과정이다.
  • 디자인 패턴은 책임-주도 설계의 결과를 표현한다.
  • 패턴은 해결하려고 하는 문제가 무엇인지를 명확하게 서술하고, 패턴을 적용할 수 있는 상황과 적용할 수 없는 상황을 함께 설명한다.
  • 디자인 패턴은 공통으로 사용할 수 있는 역할, 책임, 협력의 템플릿이다.
  • 테스트 주도 개발이 응집도가 높고 결합도가 낮은 클래스로 구성된 시스템을 개발할 수 있게 하는 최상의 프랙티스인 것은 맞지만 객체지향에 대한 경험이 적은 초보자들은 개발을 주도하기 위해 어떤 테스트를 어떤 식으로 작성해야 하는지를 결정하는 데 큰 어려움을 느낀다.
  • 테스트 주도 개발은 테스트를 작성하는 것이 아니라 책임을 수행할 객체 또는 클라이언트가 기대하는 객체의 역할이 메시지를 수신할 때 어떤 결과를 반환하고 그 과정에서 어떤 객체와 협력할 것인지에 대한 기대를 코드의 형태로 작성하는 것이다.