밍쎄의 코딩공간
객체지향의 사실과 오해 - 02 본문
협력은 다수의 연쇄적인 요청과 응답의 흐름으로 구성된다.
우리 인간도 협력이 없으면 살아갈 수 없다.
우리는 개인의 힘으로 살아가는 것이 아니라 개개인의 힘이 모여 사회 공동체의 힘으로 살아가는 것이다.
그 협력은 우리의 책임을 기반으로 만들어진다.
.
.
책임
객체 지향 세계에서 어떤 객체가 어떤 요청에 대해 대답해 줄 수 있거나, 적절한 행동을 할 의무가 있는 경우 해당 객체가 책임을 가진다고 말한다. 결국 어떤 대상에 대한 요청은 그 대상이 요청을 처리할 책임이 있음을 암시한다.
책임의 분류 (두 가지)
- 하는 것
- 객체를 생성하거나 계산하는 등의 스스로하는 것
- 다른 객체의 행동을 시작 시키는 것
- 다른 객체의 활동을 제어하고 조절하는 것 - 아는 것
- 개인적인 정보에 관해 아는것
- 관련된 객체에 관해 아는 것
- 자신이 유도하거나 계산할 수 있는 것에 관해 아는 것
책임은 객체의 외부에 제공해 줄 수 있는 정보(아는 것의 측면)와 외부에 제공해 줄 수 있는 서비스(하는 것의 측면)의 목록이다. 따라서 책임은 객체의 공용 인터페이스를 구성한다.
공용 인터페이스의 개념은 뒤에서 다룰 객체지향의 중요한 원리 중 하나인 캡슐화로 이어진다.
역할
협력 내에서 다른 객체로 대체할 수 있는 일종의 표식이다. 따라서 역할은 어떤 객체라도 대신할 수 있다는 뜻이다.
역할을 대체하기 위해서는 각 역할이 수신할 수 있는 메시지를 동일한 방식으로 이해를 해야한다.
(=메시지를 동일하게 이해하고 처리할 수 있는 객체만이 대체할 수 있다. )
대체가능성
역할은 협력 안에서 구체적인 객체로 대체될 수 있는 추상적인 협력자다. 따라서 본질적으로 역할은 다른 객체에 의해 대체 가능함을 의미한다. 객체가 역할을 대체하기 위해서는 행동이 호환돼야 한다는 점에 주목하라. 객체는 역할이 암시하는 책임보다 더 많은 책임을 가질 수 있다. 따라서 대부분의경우에 객체의 타입과 역할 사이에는 일반화/특수화 관계가 성립하는 것이 일반적이다. 즉, 역할의 대체 가능성은 행위 호환성을 의미하고, 행위 호환성은 동일한 책임의 수행을 의미한다.
협력을 따라 흐르는 객체의 책임
올바른 객체를 설계하기 위해서는 먼저 견고하고 깔끔한 협력을 설계해야 한다. 협력을 설계한다는 것은 설계에 참여하는 객체들이 주고받을 요청과 응답의 흐름을 결정한다는 것을 의미한다. 이렇게 결정된 요청과 응답의 흐름은 객체가 협력에 참여하기 위해 수행될 책임이 된다.
- 올바른 객체 설계하기
- 책임, 즉 행동 결정하기
- 그 행동을 수행하는 데 필요한 데이터를 고민
- 클래스 구현 방법 고민
<< 도움받은 싸이트 >>
Chapter.4 역할, 책임, 협력
목차
glass-milkshake-24b.notion.site