객체지향의 사실과 오해 #4 (역할, 책임, 협력)

임현규·2022년 12월 30일
0

우리 모두를 합친 것보다 더 현명한 사람은 없다 - 켄 블랜차드

협력

협력은 한 사람이 다른 사람에게 도움을 요청할 때 시작된다. 개인이 할 수 있는 일은 알아서 처리하지만 할 수 없는 일의 경우 다른 사람에게 요청하고 이러한 과정이 연쇄적으로 요청 및 처리가 이루어진다. 결과적으로 협력이란, 다수의 요청과 응답으로 이루어지고 다수의 연쇄적인 요청과 응답의 흐름으로 구성된다.

이상한 나라의 재판


파이를 훔친 혐의를 받고 있는 하트잭을 심판하기 위해 재판을 시작했다.
판사는 왕이다. 그는 다음과 같이 말했다.
"첫 번째 목격자를 불러라!!"
왕이 명령하자 하얀 토끼는 트럼펫을 세 번 불고 큰 소리로 목격자를 불렀다.
첫 번째 목격자는 모자 장수였다.
"증언 하라!!"
왕이 명령하자 모자 장수는 벌벌 떨며 자기 자신에 대해 설명하기 시작했다.
영양가 없는 증언이 끝나고 왕이 말했다.
"네가 아는 것이 그것 뿐이면 이제 증인석을 내려가도 좋다.!!"
모자 장수는 서둘러 법정을 빠져나갔다.


재판 속에서 협력 찾기

객체지향 패러다임 입장에서 이 재판을 살펴보자. 재판을 하는 이유는 하트 잭을 재판하기 위해서다. 이때 재판 진행 중 중요한 인물 3명이 등장한다.

왕(판사), 하얀 토끼(병사), 모자 장수(증인)

이들의 서로 의사소통하는 부분을 살펴보자

  1. 왕의 요청을 받은 토끼는 모자 장수를 증인석으로 설 것을 요청.
  2. 모자 장수는 증인석에 입장함으로써 토끼의 요청에 응답.
    • 모자 장수의 입장은 왕의 요청에 응답한 것이기도 하다.
  3. 왕은 모자 장수에게 증인할 것을 요청.
  4. 모자 장수는 자신일 알고 있는 것을 이야기 함으로써 왕의 요청에 응답.

책임

객체지향 세계에서 책임은 어떤 객체가 어떤 요청에 대해 응답할 수 있거나, 적절한 행동을 할 의무가 있는 경우에 해당 객체가 책임을 가지고 있다고 한다.

위에 협력관계에서 책임을 살펴보면 왕은 재판을 할 책임을, 하얀 토끼는 왕의 명령에 따라 모자 장수를 소환할 책임을, 모자 장수는 하얀 토끼 부름에 응답하고, 왕의 명령에 증언을 해야 할 의무가 있다. 즉 어떤 대상에 대한 요청은 그 대상이 요청을 처리할 책임이 있다는 것을 암시하고 있다는 것이다.

책임의 분류

책임이란 객체에 의해 정의되는 응집도 있는 행위의 집합이라 한다. 즉, 객체의 책임에는 크게 2가지로 구성되는 데 하나는 무엇을 알고 있는가(knowing) 이고 다른 하나는 무엇을 할 수 있는가(doing) 로 구성된다.

knowing과 doing 의 정의는 다음과 같다.

  • knowing
    - 개인적인 정보에 관해 아는 것

    • 관련된 객체에 대해 아는 것
    • 자신이 유도하거나 계산할 수 있는 것에 대해 아는 것
  • doing
    - 객체를 생성하거나 계산을 하는 등의 스스로 하는 것

    • 다른 객체의 행동을 시작시키는 것
    • 다른 객체의 활동을 제어하고 조절하는 것

나는 이를 우리가 프로그래밍하는데 적용해서 해석하면 다음과 같이 해석할 수 있을 것 같다. 'knowing은 객체가 스스로 상태를 관리하고 외부에 자신의 상태를 노출하지 않는 캡슐화', 'doing은 객체가 다른 객체에게 요청 또는 응답을 하기 위한 메서드, 행위, 인터페이스로 사용한다'로 해석했다.

역할

역할을 협력의 추상화이다. 위의 이상한 나라의 재판에서 각각의 객체가 하는 행동을 자세히 살펴보자. 왕은 증인석에 부를 것을 토끼에게 요청하고, 증인에게 심문 할 것을 요청한다. 왕이 하는 행동, 즉 역할을 살펴보면 왕은 증인석에 부를 것을 병사에게 요청하고 증인에게 심문을 요청하는 역할을 수행할 뿐이다. 이러한 동일한 역할을 수행할 수 있다면 왕이 아닌 여왕이 판사 역할을 수행할 수 있다. 이처럼 각각의 객체들의 협력을 추상화한 것을 역할이라 한다.

역할과 대체 가능성

역할을 통해 협력을 추상화하면 행동만 일치한다면 다른 객체로 역할을 대신 수행할 수 있다. 즉, 다형성을 활용할 수 있게 된다.

역할의 대체 가능성은 행위 호환성을 의미하고 이는 일반화/특수화 관계가 성립한다. 일반화의 경우 추상화 개념이고, 특수화의 경우 구체화한 타입이라 생각하면 된다. 중요한 것은 역할은 협력 관계를 추상화할 수 있다는 점이다.

profile
엘 프사이 콩그루

0개의 댓글