[객체지향의 사실과 오해] 1. 협력하는 객체들의 공동체
객체지향의 사실과 오해 | 조영호 - 교보문고
객체지향의 사실과 오해 | 객체지향에 대한 선입견을 버려라!『객체지향의 사실과 오해』는 객체지향이란 무엇인가라는 원론적면서도 다소 위험한 질문에 답하기 위해 쓰여진 책이다. 안타깝
product.kyobobook.co.kr
역할, 책임, 협력
객체 지향의 중요 개념
📌 역할, 책임, 협력
역할은 관련성 높은 책임의 집합이다.
역할과 책임은 협력이 원활하게 진행한데 핵심적인 구성요소이다.
- 여러 사람이 동일한 역할을 수행할 수 있다.
- 역할은 대체 가능성을 의미한다.
- 책임을 수행하는 방법은 자율적으로 선택할 수 있다.
- 한 사람이 동시에 여러 역할을 수행할 수 있다.
역할은 유연하고 재사용 가능한 협력 관계를 구축하는 데 중요한 설계 요소다,
대체 가능한 역할과 책임은 객체지향 패러다임의 중요한 기반을 제공하는 다형성과도 깊이 관련되어 있다.
객체의 덕목
협력 공동체의 일원으로서 객체는 다음 두 가지 덕목을 갖추어야 한다.
- 객체는 충분히 협력적이어야 한다,
- 객체는 다른 객체의 요청에 충실히 귀를 기울이고 다른 객체에게 적극적으로 도움을 요청할 정도로 열린 마음을 지녀야 한다.
- 모든 것을 스스로 처리하려고 하는 전지전능한 객체(god object)는 내부 복잡도에 의해 자멸한다.
- 객체는 충분히 자율적이어야 한다.
- 요청에 따른 행동은 객체 스스로 판단해야 한다.
자율적인 객체의 상태와 행동
객체는 상태(state)와 행동(behavior)을 함께 지닌 실체이다.
- 객체가 협력에 참여하기 위해 어떤 행동을 해야 한다면 그 행동을 하는 데 필요한 상태도 함께 지니고 있어야 한다.
- 객체가 스스로 판단, 결정하는 자율적인 존재로 남기 위해서는 필요한 행동과 상태를 함께 지니고 있어야 한다.
객체의 자율성은 객체의 내부와 외부를 명확하게 구분하는 것으로부터 나온다.
객체는 다른 객체가 무엇을 수행하는지는 알 수 있지만 어떻게 수행하는지는 알 수 없다.
즉, 객체의 사적인 부분은 객체 스스로 관리하고, 객체 외부에서는 접근이 허락된 수단을 통해서만 객체와 의사소통해야 한다.
협력과 메시지
객체지향의 세계에서는 오직 한 가지 의사소통 수단만이 존재하고 이를 메시지라고 한다.
객체는 협력을 위해 다른 객체에게 메시지를 전송하고 다른 객체로부터 메시지를 수신한다.
메시지를 전송하는 객체를 송신자(sender), 메시지를 수신하는 객체를 수신자(receiver)라고 부른다.
메서드와 자율성
객체가 수신된 메시지를 처리하는 방법을 메서드라고 부른다.
객체지향 프로그래밍 언어에서 메서드는 클래스 안에 포함된 함수 또는 프로시저를 통해 구현된다.
따라서 어떤 객체에게 메시지를 전송하면 결과적으로 메시지에 대응되는 특정 메서드가 실행된다.
메시지와 메서드의 분리는 객체들 간의 자율성을 증진시킨다.
객체는 자신의 상태에 따라 특정 메서드를 선택할 수 있고, 메서드를 분리하는 것은 객체의 자율성을 높이는 핵심 메커니즘이고 캡슐화와도 깊이 관련되어 있다.
객체지향의 본질
- 객체지향이란 시스템을 상호작용하는 자율적인 객체들의 공동체로 바라보고 객체를 이용해 시스템을 분할하는 방법이다.
- 자율적인 객체란 상태와 행위를 함께 지니며 스스로 자기 자신을 책임지는 객체를 의미한다.
- 객체는 시스템의 행위를 구현하기 위해 다른 객체와 협력한다. 각 객체는 협력 내에서 정해진 역할을 수행하며 역할은 관련된 책임의 집합이다.
- 객체는 다른 객체와 협력하기 위해 메시지를 전송하고. 메시지를 수신한 객체는 메시지를 처리하는 데 적합한 메서드를 자율적으로 선택한다.
💡 클래스의 구조와 메서드가 아니라 객체의 역할, 책임, 협력에 집중하라.
객체지향은 객체를 지향하는 것이지 클래스를 지향하는 것이 아니다.