객체 지향 패러다임의 핵심이 자율적인 객체들의 협력
"객체지향이란 실세계를 직접적이고 직관적으로 모델링할 수 있는 패러다임"
객체 지향 프로그래밍 : 현실 -> 소프트웨어
하지만 실세계와 소프트웨어는 구동방식이 다르다. 기본 사상만 유지하자.
카페에서 커피를 주문하고 받는데 까지 역할, 책임, 협력이라는 개념을 통해 조화가 완성된다.
주문하는 손님, 주문받는 캐시어, 커피제조하는 바리스타 라는 역할
손님은 커피를 주문할 책임, 캐시어는 주문을 받는 책임, 바리스타는 커피를 제조하는 책임
커피 주문이라는 협력에 3명이 정확하게 주문되고 커피가 전달될 수 있도록 역할과 책임을 다한다.
특정한 역할(role)에는 특정한 책임이라는 개념을 내포한다.
사람 - 객체
요청 - 메시지
처리 방법 - 메서드
객체들은 애플리케이션의 기능을 구현하기 위해 협력한다.
적절한 개체에게 적절한 책임을 할당하는 것에서 시작된다. 얼마나 적절하게 책임을 선택하느냐가 중요하다. 불분명한 책임은 애플리케이션을 불분명하게 만든다.
협력의 품질을 결정하는 것은 객체의 품질이다.
객체는 충분히 '협력적'이어야 한다.
다른 객체의 요청을 들어야 한다.
모든 것을 스스로 처리하는 전지전능 객체는 자멸한다.
다른 객체의 명령을 듣는 것이 아니라 요청에 응답을 한다. 응답 방식과 요청에 수락 여부는 객체가 정한다.
객체는 충분히 '자율적'이어야 한다.
공동 목표를 위해서 협력하지만 객체 스스로의 결정과 판단에 따라 행동하는 자율적인 존재다.
객체 = 상태(state) + 행동(behavior)
객체가 자율적인 존재가 되기 위해서는 필요한 행동과 상태를 함께 지니고 있어야 한다. 객체 내부는 차단하고, 접근이 허락된 수단을 통해서만 객체와 소통한다.
ex) 바리스타는 커피 제조방법을 아는 상태로 방법에 따라 커피를 제조한다.
각 객체는 메세지를 송신과 수신을 통해 전달하고 소통한다.
외부의 요청인 메시지와 요청을 처리하기 위한 메스드를 분리하여 자율성을 보장한다. 캡슐화(encapsulation) 와 관련된다.
중요한 것은 어떤 클래스가 필요한가가 아니라 어떤 객체들이 어떤 메시지를 주고받으며 협력하는가다.