간단한 예로 우리가 치킨집에 가서 치킨을 주문 하는 경우를 생각해 보자.
이 3 가지의 과정 속에 객체 지향에서 중요한 개념인 역할, 책임, 협력의 개념이 들어 있다.
잘 이해가 되지 않는다면 이렇게 생각해 보자
각각 고객, 주방의 요리사, 치킨집 사장님의 관점에서 본다면 이들은 아래와 같이 자신의 맡은 일을 수행하면, 임무를 완수한 것이다.
고객 → 치킨을 먹기 위해 치킨집 사장에게 주문 후, 음식이 나오면 식사.
사장 → 주문을 받고, 요리사에게 치킨을 요청 후 고객에게 전달
요리사 → 요청받은 치킨을 만들고, 다 만들면 사장에게 전달
이처럼 고객, 치킨집 사장, 요리사는 치킨을 고객에게 전달 하는 '협력'의 과정 속에서 자신의 맡은 '역할'의 '책임'을 다한다.
위에서 말 했던 과정은 일종의 '요청'과 '응답'의 과정으로 이루어 진다.
요청을 받은 사람은 자신의 역할 내의 책임을 다하면서, 요청한 사람에게 응답(response)을 한다. 이 과정은 연쇄적으로 일어난다. 또한 치킨을 주문 할 때의 예시에서도 적용이 된다.
손님은 사장님에게 치킨 주문을 '요청'하고, 사장은 요리사에게 치킨 제작을 '요청'한다. 이제 모든 요청이 완료 되었다. 이제 응답을 해주면 된다. 요리사는 치킨을 제작하여 사장님에게 전달 하면서, '응답'을 해준다. 사장님은 고객에게 치킨을 내주며 '응답'을 하면, 이런 협력 관계가 완성되고, 모든 객체는 자신의 임무를 완수한다.
이렇게 각각의 요청과 응답은 '연쇄적'으로 발생한다.
이제 역할과 책임에 대해 조금 더 자세히 정리해 보겠다.
위에서의 치킨집 사장님은 전화를 받고 주문을 받아야하는 역할을 부여 받았다. 역할의 의미를 들여다 보면 '어떤 협력에 참여하는 특정한 사람이 협력 안에서 차지하는 책임이나 임무를 의미'한다. 즉 역할은 '책임'을 내포하고 있다.
쉽게 설명 하자면, 특정한 역학을 그 객체의 '책임'이 무엇인지 암묵적으로 보여준다.
위에서 설명해왔듯이 역할, 책임, 협력은 객체지행에서 중요한 요소이다. 하지만 이것만 강조하다보면, 정작 중요한 '객체'에 대해 생각을 못할 수가 있다. 실제로 협력에 참여하는 주체는 '객체'이기 때문이다.
각각의 객체들이 어떠한 임무를 수행하기위해 서로 요청과 반응을 한다. 그러기 위해서는 객체는 두 가지 조건을 가져야 한다.
2. 객체는 충분히 '자율적'이어야 한다.
→ 객체는 어떤 일을 하거나 자기 스스로를 통제하고 절제해야 한다. 객체 들은 공동의 목표를 수행하기 위해 서로 '협력'을 해야한다. 그때마다 자신이 받은 요청을 처리하기 위해, 충분히 '자율'적으로 본인에게 주어진 책임을 수행해야한다. 만약 자율적이지 않는다면, 문제를 처리함에 있어서 또 다른 문제가 발생 할 수 있다.
객체의 자율성은 각 객체들의 내부와 외부를 명확하게 하는 것으로 부터 나온다고 한다. 객체는 오로지 본인의 역할을 수행하기 위한 기능들이 있다. 치킨 요리사가 치킨만 튀기고, 사장님은 주문만 받고, 고객은 주문만 한다. 이때, 고객은 어떤 과정으로 치킨을 만드는지, 어떤 과정으로 주문을 받는지는 모른다. 즉, 다른 객체가 '무엇(What)'을 하는지는 알 수 있지만, '어떻게 (how)' 하는지는 알 수가 없다.
단, 각 객체들은 다른 객체가 어떻게 하는지는 몰라도, 자율적인 범위 안에서 자신의 역할과 책임을 수행하면, 이 협력 관계 후에 원하는 결과가 나온다.
→ 만약 한 객체가 다른 객체로 바뀌더라도, 원하는 요청만 해결 할 수 있다면, 협력관계에 있어서 문제가 되지 않는다. 즉, 유지보수가 쉽고, 재사용이 용이하다.
이것은 자율적인 객체로 구성된 공동체라는 개념인 '객체지향'의 장점이 된다.
이책을 읽기 전에 객체지향에 대해 생각해보면, 오로지 클래스와 상속 밖에 생각이 나지 않았다. 하지만, 01협력하는 객체들의 공동체 부분을 읽으면서 생각이 바뀌게 되었다. 객체지향은 말 그대로 '객체'지향이지, 클래스지향이 아니라는 것이다.
객체 하나하나가 자신들의 책임들을 서로 협력관계 속에 수행하면서, 결과를 제공해준다. 이런 부분은 객체 지향에 대해 다시 한번 생각 할 수 있었다.
즉 객체 지향에서 가장 중요한 것은 '자율성을 가진 객체들의 협력'이다.