01_협력하는 객체들의 공동체
“객체들의 패러다임의 핵심은 자율적인 객체들의 협력”
객체지향의 목표는 실세계를 모방하는 것이 아니라,
고객과 사용자를 만족시키는 신세계를 창조하는 것.
협력하는 사람들
요청-응답-협력, 역할-책임
역할, 책임, 협력
적절한 객체에게 적절한 책임을 할당하는 것.
책임은 객체지향 설계의 품질을 결정하는 가장 중요한 요소.
객체의 역할
- 여러 객체가 동일한 역할을 수행할 수 있다.
- 역할은 대체 가능성을 의미한다.
- 각 객체는 책임을 수행하는 방법을 자율적으로 선택할 수 있다.
- 하나의 객체가 동시에 여러 역할을 수행할 수 있다.
협력 속에 사는 객체
객체는 어플리케이션의 기능을 구현하기 위해 존재한다.
객체지향 어플리케이션의 아름다움을 결정하는 것 → 협력
협력이 얼마나 조화를 이루는 가를 결정하는 것 → 객체
결국, 협력(어플리케이션)의 품질을 결정하는 것은 객체의 품질
이를 위해, 객체가 갖춰야 할 덕목
- 객체는 충분히 ‘협력적’이어야 한다. 스스로 모든 것을 처리하려는 객체는 내부적인 복잡도에 의해 자멸하고 만다.
- 다른 객체의 요청, 다른 객체에게 요청에 열려 있어야 한다.
- 객체는 충분히 ‘자율적’이어야 한다.
- 다른 객체가 요청한 응답 여부나, 응답 방식은 객체 스스로 판단하고 결정한다.
객체지향 설계의 묘미
다른 객체와 조화롭게 협력할 수 있을 만큼 충분히 개방적인 동시에
협력에 참여하는 방법을 스스로 결정할 수 있을 만큼 충분히 자율적인 객체들의 공동체를 설계하는 것!
과거의 전통적인 개발 방법과는 다른 객체지향의 핵심은,
데이터(상태)와 프로세스(행동)를 객체라는 하나의 틀 안에 함께 묶어 객체의 자율성을 보장한다.
이러한 자율적인 객체로 구성된 공동체는 유지보수가 쉽고,
재사용이 용이한 시스템을 구축할 수 있는 가능성을 제시한다.
객체 간의 의사소통 수단: 메시지
수신된 메시지를 처리하는 방법: 메서드
다른 프로그래밍 언어와 구별되는 핵심적인 특징
메시지를 수신한 객체가 실행 시간에 메서드를 선택할 수 있다.
메시지와 메서드의 분리 → 객체의 협력에 참여하는 객체들 간의 자율성 증진.
캡슐화(encapsulation)와 깊은 관련.