시배's Android

객체지향의 사실과 오해 | 1장. 협력하는 객체들의 공동체 본문

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

객체지향의 사실과 오해 | 1장. 협력하는 객체들의 공동체

si8ae 2023. 8. 28. 23:07
객체지향의 목표는 실세계를 모방하는 것이 아니다. 오히려 새로운 세계를 창조하는 것이다.
객체지향은 객체를 지향하는 것이지 클래스를 지향하는 것이 아니다.
클래스는 협력에 참여하는 객체를 만드는 데 필요한 구현 메커니즘일 뿐이다.

협력하는 사람들

  • 역할, 책임, 협력은 우리가 삶을 영위하기 위해 다른 사람과 접촉하는 모든 곳에 존재한다.
  • 객체지향에서 가장 중요한 개념은 역할, 책임, 협력이다.

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

  • 요청과 응답을 통해 다른 사람과 협력 할 수 있는 능력은 인간으로 하여금 거대하고 복잡한 문제를 해결할 수 있는 공동체를 형성할 수 있게 만든다.
  • 협력의 성공은 특정한 역할을 맡은 각 개인이 얼마나 요청을 성실히 이행하는가에 달려 있다.

역할과 책임

  • 사람들은 다른 사람과 협력하는 과정 속에서 역할을 부여받는다.
  • 역할은 어떤 협력에 참여하는 특정한 사람이 협력 안에서 차지하는 책임이나 임무를 의미한다.
  • 역할이라는 단어는 의미적으로 책임이라는 개념을 내포한다.
  • 여러 사람이 동일한 역할을 수행할 수 있다.
  • 역할은 대체 가능성을 의미한다.
  • 책임을 수행하는 방법은 자율적으로 선택할 수 있다.
  • 이처럼 동일한 요청에 대해 서로 다른 방식으로 응답할 수 있는 능력을 다형성이라고 한다.
  • 한 사람이 동시에 여러 역할을 수행할 수 있다.

역할, 책임, 협력

  • 사람이라는 단어를 객체로, 에이전트의 요청을 메시지로, 에이전트가 요청을 처리하는 방법을 메서드로 바꾸면 마법처럼 대부분의 설명을 객체지향이라는 문맥으로 옮겨올 수 있다.
  • 사람들은 커피 주문과 같은 특정한 목표를 이루기 위해 서로 협력한다.
  • 협력의 핵심은 특정한 책임을 수행하는 역할들 간의 연쇄적인 요청과 응답을 통해 목표를 달성한다는 것이다.
  • 책임이 불분명한 객체는 애플리케이션의 미래 역시 불분명하게 만든다.
    역할은 유연하고 재사용 가능한 협력 관계를 구축하는 데 중요한 설계 요소다.

협력 속에 사는 객체

  • 객체는 애플리케이션의 기능을 구현하기 위해 존재한다.
  • 아주 작은 기능조차 객체 혼자 감당하기에는 버거울 정도로 복잡하고 거대하기 때문에 일반적으로 객체는 다른 객체와의 협력을 통해 기능을 구현하게 된다.
  • 객체는 충분히 협력적이어야 한다.
  • 객체는 다른 객체의 명령에 복종하는 것이 아니라 요청에 응답할 뿐이다.
  • 객체가 충분히 자율적이어야 한다는 것이다.

상태와 행동을 함께 지닌 자율적인 객체

  • 흔히 객체를 상태와 행동을 함께 지닌 실체라고 정의한다.
  • 이 말은 객체가 협력에 참여하기 위해 어떤 행동을 해야 한다면 그 행동을 하는 데 필요한 상태도 함께 지니고 있어야 한다는 것을 의미한다.
  • 객체가 협력에 참여하는 과정 속에서 스스로 판단하고 스스로 결정하는 자율적인 존재로 남기 위해서는 필요한 행동과 상태를 함께 지니고 있어야 한다.
  • 객체는 다른 객체가 무엇을 수행하는지는 알 수 있지만 어떻게 수행하는지에 대해서는 알 수 없다.
  • 자율적인 객체로 구성된 공동체는 유지보수가 쉽고 재사용이 용이한 시스템을 구축할 수 있는 가능성을 제시한다.

객체지향의 본질

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