[객사오] 1. 협력하는 객체들의 공동체

2023. 7. 25. 21:38Computer Sciences/OOP

요청과 응답으로 구성된 협력

  • 객체지향에서는 역할을 수행할 수 있는 객체에게 요청(request)한다.
  • 요청을 받은 객체는 요청한 객체에게 주어진 책임을 다하여 결과를 응답(response)한다.
  • 요청과 응답을 통해 객체들은 협력(collaboration)한다.

역할과 책임

역할 (role)

  • 어떤 협력에 참여하는 특정한 사람이 협력 안에서 차지하는 책임이나 임무를 의미한다.
  • 역할은 책임이라는 개념을 내포하고 있다.
  • 여러 객체가 동일한 역할을 수행할 수 있다.
    • 해당 역할을 수행할 수 있다면 어떤 객체라도 상관없다.
  • 한 사람이 동시에 여러 역할을 수행할 수 있다.

책임 (responsibility)

  • 책임을 수행하는 방법은 자율적으로 선택할 수 있다.
💡 특정한 역할은 특정한 책임을 암시한다. 협력에 참여하며 특정한 역할을 수행하는 객체들은 역할에 적합한 책임을 수행하게 된다.

협력 속에 사는 객체

  • 객체지향 애플리케이션에서 윤곽을 결정하는 것은 역할, 책임, 협력이지만 실제로 협력에 참여하는 주체는 객체다.

객체가 갖춰야할 덕목

  1. 객체는 충분히 ‘협력적’이어야 한다.
    • 모든 문제를 혼자서 해결하려는 객체가 아닌 특정 역할에 따른 객체 간의 상호작용을 통해서 문제를 해결하기 위해 협력적이어야 한다.
  2. 객체는 충분히 ‘자율적’이어야 한다.
    • 객체는 어떤 행동을 하기 위해 필요한 상태를 스스로 알고 있다.
    • 객체는 스스로 행동하고 그에 따라 상태를 변경해야 한다.
    • 객체 내부는 외부에서 간섭할 수 없도록 차단해야 한다.
💡 객체는 다른 객체가 무엇을 수행하는지는 알 수 있지만 어떻게 수행하는지에 대해서는 알 수 없다.

객체지향의 본질

  • 객체지향이란 시스템을 상호작용하는 자율적인 객체들의 공동체로 바라보고 객체를 이용해 시스템을 분할하는 방법이다.
  • 자율적인 객체란 상태행위를 함께 지니며 스스로 자기 자신을 책임지는 객체를 의미한다.
  • 객체는 시스템의 행위를 구현하기 위해 다른 객체와 협력한다. 각 객체는 협력 내에서 정해진 역할을 수행하며 역할은 관련된 책임의 집합이다.
  • 객체는 다른 객체와 협력하기 위해 메시지를 전송하고, 메시지를 수신한 객체는 메시지를 처리하는 데 적합한 메서드를 자율적으로 선택한다.
💡 클래스의 구조와 메서드가 아니라 객체의 역할, 책임, 협력에 집중하라. 객체지향은 객체를 지향하는 것이지 클래스를 지향하는 것이 아니다.