협력하는 객체들의 공동체
객체지향의 목표는 실세계를 모방하는 것이 아니라, 새로운 세계를 창조하는 것. 단순히 실세계를 소프트웨어 안으로 옮겨 담는 것이 아니라, 고객과 사용자를 만족시킬 수 있는 신세계를 창조하는 것
협력하는 사람들
- 커피 공화국의 아침
- 카페테리어에서 커피를 주문하고 받는 과정에는 손님, 캐시어, 바리스타 사이의 암묵적인 협력 관계가 존재
- 커피 주문이라는 협력에 참여하는 모든 사람들은 각자 맡은 바 역할과 책임을 다하고 있음
- 요청과 응답으로 구성된 협력
- 사람들은 문제 해결에 필요한 지식을 알고 있거나 서비스를 제공해줄 수 있는 사람에게 도움을 요청
- 요청은 연쇄적으로 발생
- 요청을 받은 사람은 주어진 책임을 다하면서 필요한 지식이나 서비스를 제공, 즉 요청에 응답
- 우리는 요청과 응답을 통해 다른 사람과 협력하여 문제를 해결
- 역할과 책임
- 역할은 협력 안에서 차지하는 책임이나 임무를 의미
- 특정한 역할은 특정한 책임을 암시
-
사람들은 협력을 위해 특정한 역할을 맡고 역할에 적합한 책임을 수행
- 여러 사람이 동일한 역할을 수행할 수 있음
- 역할은 대체 가능성을 의미
- 책임을 수행하는 방법은 자율적으로 선택할 수 있음(다형성)
- 한 사람이 동시에 여러 역할을 수행할 수 있음
역할, 책임, 협력
-
기능을 구현하기 위해 협력하는 객체들
- 사람: 객체
- 에이전트의 요청: 메시지
- 에이전트가 요청을 처리하는 방법: 메서드
-
역할과 책임을 수행하며 협력하는 객체들
- 협력에 참여하는 각 개인은 책임을 수행하기 위해 다른 사람에게 도움을 요청하기도 하며, 이를 통해 연쇄적인 요청과 응답으로 구성되는 협력 관계가 완성
- 애플리케이션의 기능은 더 작은 책임으로 분할되고 책임은 적절한 역할을 수행할 수 있는 객체에 의해 수행
- 적절한 객체에게 적절한 책임을 할당해야 함
- 역할은 관련성 높은 책임의 집합
협력 속에 사는 객체
협력 공동체의 일원으로서 객체
-
객체는 충분히 ‘협력적’이어야 함
- 객체는 다른 객체의 명령에 복종하는 것이 아니라 요청에 응답할 뿐이며, 어떤 방식으로 응답할지는 객체 스스로 판단하고 결정함
-
객체는 충분히 ‘자율적’이어야 함
- 객체들은 공동의 목표를 달성하기 위해 협력에 참여하지만 자신의 행동을 스스로 결정하고 책임짐
상태와 행동을 함께 지닌 자율적인 객체
- 객체는 협력에 참여하기 위해 어떤 행동을 해야 하고, 그 행동을 하는 데 필요한 상태도 함께 지니고 있음
- 객체는 객체의 내부와 외부를 명확하게 구분하여 자율성을 갖춤
- 객체지향 개발에서는 데이터와 프로세스를 객체라는 하나의 틀 안에 함께 묶어 놓음으로써 객체의 자율성을 보장
협력과 메시지
- 객체지향의 세계에서는 오직 한 가지 의사소통 수단인 ‘메시지’를 이용
- 객체는 협력을 위해 다른 객체에게 메시지를 전송하고 다른 객체로부터 메시지를 수신 함
메서드와 자율성
- 메서드(객체가 수신된 메시지를 처리하는 방법)
- 어떤 객체에게 메시지를 전송하면 결과적으로 메시지에 대응되는 특정 메서드가 실행
- 메시지와 메서드의 분리는 객체들 간의 자율성을 증진시킴(객체는 메시지에 응답하기 위해 자신만의 자율적인 방법을 택할 수 있음) cf) 캡슐화
객체지향의 본질
-
객체를 지향
- 클래스는 객체지향의 핵심을 이루는 중심 개념은 아님
- 지나치게 클래스를 강조하는 관점은 객체의 캡슐화를 저해하고 클래스를 서로 강하게 결합시키는 문제가 있음
- 객체지향 설계를 위해서는 메시지를 주고받는 객체의 관점으로 사고의 중심을 전환해야 함
- 객체의 역할, 책임, 협력에 집중