• 객체를 상태와 행동을 함께 지닌 실체라고 정의합니다. 이 말은 객체가 협력에 참여하기 위해 어떤 행동을 해야 한다면 그 행동을 하는 데 필요한 상태도 함께 지니고 있어야 한다는 것을 의미합니다. 객체가 협력에 참여하는 과정 속에서 스스로 판단하고 스스로 결정하는 자율적인 존재로 남기 위해서는 필요한 행동과 상태를 함께 지니고 있어야 합니다.

객체의 역할

  • 여러 객체가 동일한 역할을 수행할 수 있습니다.
  • 역할은 대체 가능성을 의미합니다.
  • 각 객체는 책임을 수행하는 방법을 자율적으로 선택할 수 있습니다.
  • 하나의 객체가 동시에 여러 역할을 수행할 수 있습니다.

객체지향의 본질

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

핵심

  • 훌륭한 객체지향 설계자가 되기 위해 거쳐야 할 첫 번째 도전은 코드를 담는 클래스의 관점에서 메시지를 주고받는 객체의 관점으로 사고의 중심을 전환하는 것입니다.
  • 클래스를 쓴다고 해서 상속을 사용한다고 해서 객체지향 설계를 하는 것이 압니다.
  • 중요한 것은 어떤 클래스가 필요한가가 아니라 어떤 객체들이 어떤 메시지를 주고 받으며 협력하는가입니다.
  • 클래스는 객체들의 협력 관계를 코드로 옮기는 도구에 불과합니다. 클래스는 객체지향 세계의 도시전설입니다.

참고