Book Record
[객체지향의 사실과 오해] Chapter1. 협력하는 객체들의 공동체
그냥팬더
2021. 4. 20. 16:33
반응형
01. 협력하는 객체들의 공동체
객체지향: 실세계의 모방
- 철학적인 관점에서는 옳으나, 실용적인 관점에서는 옳지 않다.
- 기본 사상을 이해하고 학습하는데에는 효과적이다.
실제 객체지향의 목표: 새로운 세계를 창조하는 것
- 고객과 사용자를 만족시킬 수 있는 신세계
협력하는 사람들
요청과 응답으로 구성된 협력
- 스스로 해결하지 못하는 문제를 해결 할 때, 도움을 요청(Request)한다.
- 한 사람의 요청은 또 다른 사람에게 요청을 유발해, 연쇄적으로 발생한다.
- 요청을 받은 사람은 다른 사람의 요청에 응답(Response)한다.
- 응답 역시 요청의 방향과 반대 방향으로 연쇄적으로 전달된다.
- 요청과 응답을 통해 협력(Collaboration) 할 수 있는 능력은 복잡한 문제를 해결할 수 있게 한다.
역할과 책임
- 사람들은 다른 사람과 협력하는 과정 속에서 역할(Role)을 부여 받는다.
- 협력 안에서 차지하는 책임, 의무를 의미한다.
- 역할은 책임이라는 개념을 내포한다.
- 특정한 역할은 특정한 책임을 암시한다.
- 특정할 역할을 수행하는 사람들은 역할에 적합한 책임을 수행하게 된다.
중요한 개념
- 여러 사람이 동일한 역할을 수행할 수 있다.
- 역할은 대체 가능성을 의미한다.
- 다수의 수신자가 동일한 역할을 수행할 수 있다면 요청자는 어떤 사람이 역할을 수행해도 문제가 되지않는다.
- 책임을 수행하는 방법은 자율적으로 선택할 수 있다.
- 요청을 받은 사람들은 요청을 처리하는 방법을 자유롭게 선택할 수 있다.
- 서로 다른 방식으로 요청을 처리할 수 있다. (다형성)
- 한 사람이 동시에 여러 역할을 수행할 수 있다.
역할, 책임, 협력
역할과 책임을 수행하며 협력하는 객체들
- 협력의 핵심: 연쇄적인 요청과 응답을 통해 목표를 달성한다는 것이다.
'어떤 객체도 섬이 아니다.'
시스템의 목적을 위해 다른 객체와 적극적으로 협력한다.
- 시스템의 기능은 여러 객체가 협력해서 일궈낸 결실.
- 애플리케이션의 기능은 더 작은 책임으로 분할되고, 책임은 적절한 역할을 수행할 수 있는 객체에 의해 수행된다.
- 역할은 유연하고 재사용 가능한 협력 관계를 구축하는데 중요한 설계 요소.
협력 속에 사는 객체
- 객체: 협력에 참여하는 주체
- 끊임없이 메시지를 주고 받으며, 협력한다.
- 객체는 기능을 구현하기 위해 존재한다.
객체가 가져야할 덕목
- 객체는 충분히 '협력적'이어야 한다.
- 다른 객체의 요청에 충실히 귀 기울이고, 다른 객체에 적극적으로 도움을 요청할 정도의 열린 마음.
- 단, 어떻게 요청에 응답할 지는 스스로 결정하고 판단한다.
- 객체가 충분히 '자율적'이어야 한다.
- 스스로의 결정과 판단에 따라 행동한다.
상태와 행동을 함께 지닌 자율적인 객체
- 객체: 상태와 행동을 지닌 실체.
- 객체의 자율성은 내부와 외부를 명확하게 '구분'하는 것으로부터 나온다.
- 사적인 부분(내부)은 객체 스스로 관리하고, 외부로부터 차단해야 한다.
- 객체의 외부에서는 허락된 수단만으로 의사소통해야 한다.
- 다른 객체가 '무엇'을 수행하는지는 알 수 있지만, '어떻게' 수행하는지에 대해서는 알 수 없다.
- 과거 개발은 데이터와 프로세스를 분리
- 객체지향에서는 데이터와 프로세스를 객체에 묶어 놓아 객체의 자율성을 보장한다.
협력과 메시지
- 메시지: 한 객체가 다른 객체에게 요청하는 것을 메시지를 전송한다고 말하고 다른 객체로부터 요청을 받는 것을 메시지를 수신한다고 말한다.
- 객체는 다른 객체에게 메시지를 전송하고, 다른 객체로부터 메시지를 수신한다.
메서드와 자율성
- 메서드: 객체가 수신된 메시지를 처리하는 방법.
- 메시지를 수신한 객체가 메서드를 선택할 수 있다는 점은 객체지향 프로그래밍을 구분 짓는 핵심적인 특징 중 하나다.
- 메시지와 메서드의 분리는 객체의 협력에 참여하는 객체들 간의 자율성을 증진시킨다.
객체지향의 본질
- 객체지향이란 시스템을 상호작용하는 자율적인 객체들의 공동체로 바라보고 객체를 이용해 시스템을 분할하는 방법.
- 자율적인 객체란 상태와 행위를 지니며 스스로 책임지는 객체를 의미한다.
- 객체는 시스템의 행위를 구현하기 위해 다른 객체들과 협력한다.
- 각 객체는 정해진 역할을 수행하며, 역할은 관련된 책임의 집합이다.
- 메시지를 수신한 객체는 메시지를 처리하는데 적합한 메서드를 자율적으로 선택한다.
객체를 지향하라
- 클래스: 객체지향 프로그래밍의 중심 개념이라 생각한다.
- 하지만, 매우 중요한 구성요소지, 중심 개념은 아니다.
훌륭한 객체지향 설계자가 되려면
- 클래스의 관점에서 메세지를 주고받는 객체의 관점으로 사고의 중심을 전환하도록 도전.
- 어떤 클래스가 필요한가가 아니라, 어떤 객체들이 어떤 메시지를 주고받으며 협력하는가
- 객체지향의 핵심은 클래스가 아니라, 적절한 책임을 수행하는 역할 간의 유연하고 견고한 협력 관계를 구축하는 것.
"객체의 역할, 책임, 협력에 집중하라. 객체 지향은 객체를 지향하는 것이지 클래스를 지향하는 것이 아니다"
반응형