역할은 어떤 협력에 참여하는 특정한 사람이 협력 안에서 차지하는 책임이나 의무를 의미한다.
특정한 역할은 특정한 책임을 암시한다. 협력에 참여하며 특정한 역할을 수행하는 사람들은 역할데 적합한 책임을 수행하게 된다.
객체지향에서 적절한 객체에게 책임을 할당하는것이 중요하다고 나와있다.
즉 데이터가 중요한것 아닌 어떤 책임에 따라 그 책임을 수행할 수 있는 기능을 구현하는 목적으로 설계를 해야한다.
객체의 집단에서도 공동의 목표를 달성하기 위해 다른 객체와 조화롭게 협력할 수 있는 충분히 개방적이고 자율적인 객체들을 설계해야한다.
행동이란 외부의 요청 또는 수신된 메시지에 응답하기 위해 동작하고 반응하는 활동이다. 행동의 결과로 객체는 자신의 상태를 변경하거나 다른 객체에게 메시지를 전달할 수 있으며 외부에 가시적이어야 한다.
즉 객체간의 협력을 위해 메시지를 보내면 수신하여 응답하기 위한 행동을 만들어야 한다.
상태를 외부에 노출시키지 않고 행동을 경계로 객체의 자율성을 높이는것과 동시에 협력은 유연하고 간결해진다.
객체가 어떤 행동을 하느냐에 따라 객체의 타입이 결정된다.
인터페이스가 구현 세부 사하을 노출하기 시작하면 작은 변동에도 전체 협력이 요동치는 결과를 얻는다.
객체를 만들때 나는 무조건 데이터를 먼저 생각하였다. 학생이라면 이름, 학교, 성적등 선생님이라면 이름, 학교, 담당 과목, 스케줄등 해당 객체가 필요한 필드를 먼저 생각하고 ERD나 엔티티를 만들려고 했었다. 물론 고통된 기능이나, 일반화 시킬 수 있는 클래스는 추상클래스로 공통되고 다양한 기능들을 제공해야 하는 부분은 인터페이스로 기초적인 지식은 있었지만 이책은 완전히 반대로 설명하고 있다.
즉 책의 제목 그대로 내가 지금까지 보고 생각하고 만들었던것이 정반대로 설명하고 있다. 나를 포함한 많은 사람들이 오해를 하고 있던 것이였다. 이책에서 가장 중요하다고 생각되는 문구이다.
행동이 상태를 결정한다.