Taking baby-developer steps

[객체지향의 사실과 오해] 4. 역할, 책임, 협력 - 3 역할 - 객체의 추상화 본문

CS 지식/객체지향

[객체지향의 사실과 오해] 4. 역할, 책임, 협력 - 3 역할 - 객체의 추상화

Surin Lee 2023. 11. 22. 22:03

역할(role)이 왜 필요할까 

협력 안에서 어떤 객체가 "수행하는 책임의 집합"은 "수행하는 역할"을 의미한다. 역할과 객체 자체는 어떻게 다를까? 역할은 재사용성을 높이고 유연한 객체지향 설계를 돕는다. 맨 처음 손님이 카페에서 커피를 주문하는 협력과정을 다시 떠올려보자.  

 손님이 캐셔에게 음료 주문을 요청하고, 캐셔가 바리스타에게 음료 제조 요청을 보낸다. 바리스타는 음료를 제조함으로써 캐셔의 요청에 응답하고, 캐셔는 손님에게 음료가 완성되었음을 알림으로서 응답한다. 이때, 손님이 김철수일 때와 Elin일 때, 캐셔가 박고슴일때와 Nate일 때 이 협력의 과정이 다르지 않다. 모두 "캐셔", "바리스타", "손님"이라는 역할을 할 수 있다면 해당 자리를 어떤 객체라도 대신할 수 있다. 이는 협력을 추상화 함으로서 많은 경우의 수를 가진 협력을 포괄하는 과정과도 같다.

 역할을 수행 할 수 있다는 것은, 동일한 메시지(요청 및 응답)을 이해할 수 있는 객체라는 말이다. 동일한 역할을 수행하는 객체들은 동일한 메시지를 수신할 수 있다.

 역할은 유사한 협력을 추상화해, 협력이 좀 더 유연해지고 다양한 객체들이 동일한 협력에 참여할 수 있게 해 재사용성이 높아진다. 역할은 이로 인해 단순성(simplicity), 유연성(flexibility), 재사용성(reusability)을 뒷받침한다.

 

대체가능성

 역할은 행동이 호환돼는 다른 객체에 의해 대체가능하다. 행동이 호환된다는 것은 곧 모든 책임을 동일하게 수행할 수 있다는 것이다.

 객체는 역할에 주어진 책임 이외에 다른 책임을 수행할 수도 있다. 박고슴은 손님의 주문을 받는 캐셔 역할을 할 수도 있지만 손님으로서 커피를 주문할 수도 있고 학생으로서 학교에 출석할 본질적인 책임을 가질 수 있다. 

 즉 객체는 역할이 암시하는 책임보다 더 많은 책임을 가질 수 있다. 이로 인해 대부분의 경우 객체의 타입과 역할 사이에는 일반화/특수화 관계가 성립한다. 역할 자체가 객체의 추상화이다.


참고 문헌 : 객체지향의 사실과 오해

Comments