객체를 상태와 행동을 함께 지닌 실체라고 정의합니다. 이 말은 객체가 협력에 참여하기 위해 어떤 행동을 해야 한다면 그 행동을 하는 데 필요한 상태도 함께 지니고 있어야 한다는 것을 의미합니다. 객체가 협력에 참여하는 과정 속에서 스스로 판단하고 스스로 결정하는 자율적인 존재로 남기 위해서는 필요한 행동과 상태를 함께 지니고 있어야 합니다.
객체의 역할
여러 객체가 동일한 역할을 수행할 수 있습니다.
역할은 대체 가능성을 의미합니다.
각 객체는 책임을 수행하는 방법을 자율적으로 선택할 수 있습니다.
하나의 객체가 동시에 여러 역할을 수행할 수 있습니다.
객체지향의 본질
객체지향이란 시스템을 상호작용하는 자율적인 객체들의 공동체로 바라보고 객체를 이용해 시스템을 분할하는 방법입니다.
자율적인 객체란 상태와 행위를 함께 지니며 스스로 자기 자신을 책임지는 객체를 의미입니다.
객체는 시스템의 행위를 구현하기 위해 다른 객체와 협력합니다. 각 객체는 협력 내에서 정해진 역할을 수행하며 역할은 관련된 책임의 집합입니다.
객체는 다른 객체와 협력하기 위해 메시지를 전송하고, 메시지를 수신한 객체는 메시지를 처리하는 데 적합한 메서드를 자율적으로 선택합니다.
핵심
훌륭한 객체지향 설계자가 되기 위해 거쳐야 할 첫 번째 도전은 코드를 담는 클래스의 관점에서 메시지를 주고받는 객체의 관점으로 사고의 중심을 전환하는 것입니다.
클래스를 쓴다고 해서 상속을 사용한다고 해서 객체지향 설계를 하는 것이 압니다.
중요한 것은 어떤 클래스가 필요한가가 아니라 어떤 객체들이 어떤 메시지를 주고 받으며 협력하는가입니다.
클래스는 객체들의 협력 관계를 코드로 옮기는 도구에 불과합니다. 클래스는 객체지향 세계의 도시전설입니다.