Chap01 협력하는 객체들의 공동체

이연희·2022년 7월 5일
0

Chap01 협력하는 객체들의 공동체

현실 세계의 사람들이 암묵적인 약속과 명시적인 기반으로 협력하며 목표를 달성해 나가는 과정은 "메세지(message)"를 주고 받으며 공동의 목표를 달성하기 위해 "협력(collaboration)"하는 객체들의 관계를 설명할 수 있다.

협력하는 사람들

예를 들어 스타벅스의 캐셔와 바리스타 그리고 손님이 있다고 가정하자. 각각의 역할이 지니는 책임은 다음과 같다. 캐셔는 커피가 준비됐다는 사실을 손님에게 알리는 책임, 바리스타는 커피를 제작하는 책임, 손님은 커피를 주문하는 책임을 가진다. 캐셔, 바리스타, 손님 각 3명의 사람이 스스로의 책임을 다해 커피 주문이라고 불리는 협력관계를 이룬다.

요청과 응답으로 구성된 협력

요청과 응답으로 구성된 협력이다. '손님 -> 캐셔 -> 바리스타' 순으로 각자 원하는 것을 요청한다. 그리고 다시 연쇄적으로 '손님 <- 캐셔 <- 바리스타' 순으로 받은 요청에 대한 응답을 한다.

역할과 책임

협력하는 과정 속에서 특정한 역할(role)을 부여받는다. 커피주문 협력관계에는 '손님', '캐셔', '바리스타'의 역할이 존재한다. 역할은 협력 안에서 차지하는 책임이나 임무를 의미한다. 역할이라는 단어는 책임이라는 개념을 내포한다. 즉, 특정한 역할은 특정한 책임을 암시한다.

여러 사람이 동일한 역할을 수행할 수 있기 때문에 역할은 대체 가능하다. 위의 예시에서 캐셔는 대체 가능한 역할임을 알 수 있다. 두 명의 캐셔가 같은 역할을 수행한다면 누가 역할을 수행하더라도 문제가 없다.
또한 책임을 수행하는 방법을 자율적으로 선택 가능하다. 동일한 요청에 서로 다른 방식으로 응답할 수 있는 능력을 다형성(polymorhphism)이라 한다.
그리고 하나의 객체가 동시에 여러 역할을 수행할 수 있다. 현실 세계에서 한 사람이 회사에선 사원이고 집에 돌아와선 부모와 남편 혹은 아내의 역할을 가지는 것을 의미한다.

역할, 책임, 협력

사람이라는 단어를 객체로, 요청을 메세지로, 요청을 처리하는 방법을 메서드로 바꾸면 객체지향을 설명할 수 있다.

협력 속에 사는 객체

객체는 다른 객체와의 협력을 통해 기능을 구현한다. 객체는 다른 객체의 명령에 복종하는 것이 아니라 요청에 응답할 뿐이다.

흔히 객체를 상태(state)와 행동(behavior)을 함께 지닌 실체라고 한다. 이는 객체가 협력에 참여하기 위해 어떤 행동을 해야 하면 그 행동을 하기 위한 상태도 가지고 있어야 한다는 뜻이다. 커피를 주문하는 협력 과정에 참여한 손님과 캐셔, 바리스타는 외부의 간섭을 받지 않고 스스로 판단하는 자율적인 존재였다. 객체의 관점에서 자율성이란 자신의 상태를 직접 관리하고 상태를 기반으로 스스로 판단하고 행동할 수 있음을 의마한다. 객체는 행동을 위해 필요한 상태를 포함하는 동시에(바리스타가 커피 제조 방법을 기억) 특정한 행동을 수행하는 방법을 스스로 결정할 수 있어야 한다(바리스타가 알고 있는 제조 방법에 따라 커피를 제조).

객체지향의 본질

객체지향이란 자율적인 객체들의 공동체로 시스템을 바라보고 분할하는 방법이다. 자율적인 객체란 상태와 행위를 함께 지니며 자기 자신을 책임지는 객체이다.

애플리케이션을 협력하는 객체들의 공동체가 아닌 클래스로 구성된 설계도로 보는 관점은 유연하고 확장 가능한 애플리케이션의 구축을 방해한다. 클래스의 관점이 아니라 메세지를 주고받는 객체의 관점으로 사고의 중심을 전환해야 한다.

객체지향의 핵심은 클래스가 아니다. 핵심은 적절한 책임을 수행하는 역할 간의 유연하고 견고한 협력 관계를 구축하는 것이다. 또한 클래스들의 정적인 관계가 아니라 메세지를 주고받는 객체들의 동적인 관계이다. 객체의 역할, 책임, 협력에 집중해야 한다.

profile
공부기록

0개의 댓글