IV. 역할, 책임, 협력
"우리 모두를 합친 것보다 더 현명한 사람은 없다."
– 켄 블랜차드(Ken Blanchard)
이번 장은 제목 그대로 역할, 책임, 협력,
이 세 단어를 중심으로 객체지향의 본질을 풀어내는 장인 것 같다.
단어 자체는 익숙하지만, 이 단어들이 객체지향과 어떤 연결고리를 갖는지 설명한다.
경제학 게임 하나를 고안하여 실행한 독일의 베르너 귀스 교수는 제안자와 응답자로 나누어 실험을 진행하였다.
이 실험의 결과로서, 인간은 “이득을 얻는 것”보다 공정함과
자존심을 더 중시하며 행동한다고 한다.
이런 맥락은 객체지향에서도 그대로 이어지는데,
객체도 서로 협력하며 동작하는 존재다.
객체를 설계할 때 중요한 것은 객체의 내부 상태가 아니라
협력 안에서의 역할과 책임이라고 서술한다.
두 번째로는 『이상한 나라의 앨리스』 속 재판 장면을 예시로 든다.
이처럼 객체들은 요청-응답을 주고받으며 하나의 목적(재판)을 이루기 위해 협력한다.
이 모든 흐름은 협력이라는 문맥 안에서 진행되고, 각 객체는 협력 속에서 자신의 역할과 책임을 갖는다.
같은 재판의 흐름이 모자 장수, 요리사, 앨리스로 증인만 바뀌어 반복된다. 이 반복되는 구조를 추상화하면 아래처럼 된다.
이렇게 역할을 기준으로 협력을 설계하면 시스템은 더 유연하고 재사용이 가능해진다.
역할은 “이 자리엔 이 역할을 수행할 수 있는 누구든 들어올 수 있음!”이라는 뜻이다.
행위 호환성이 있으면, 서로 다른 객체들도 동일한 역할을 수행할 수 있다.
객체지향 설계의 핵심은 클래스나 데이터부터 시작하지 않는 것이다.
즉, 협력 속에서 필요한 책임을 먼저 정의하고,
그 책임을 수행할 객체와 메시지를 고민한 다음
그 객체가 필요한 데이터를 결정하고, 마지막에 클래스가 등장해야 한다.
객체지향 설계의 핵심이 결국 협력임을 다시 일깨워준다.
객체는 협력 속에서 의미를 갖고,
협력은 역할과 책임을 통해 구성된다.
객체를 설계할 때 “이 객체가 어떤 데이터를 갖고 있는가?” 보다는
“이 객체가 어떤 역할을 수행하고, 누구와 협력하는가?”
를 먼저 묻는 것이 객체지향적인 접근이 아닐까 생각한다.