[책읽기] 객체지향의 사실과 오해 - 4장

Haiseong Jeong·2023년 10월 24일
0
post-thumbnail

4장 : 역할, 책임, 협력

객체의 모양을 빚는 것은 객체가 참여하는 협력이다. 어떤 협력에 참여하는지가 객체에 필요한 행동을 결정하고, 필요한 행동이 객체의 상태를 결정한다. 개별적인 객체의 행동이나 상태가 아니라 객체들 간의 협력에 집중하라.

협력

  • 협력의 본질은 요청과 응답으로 연결되는 사람들의 네트워크다.
  • 협력은 한 사람이 다른 사람에게 도움을 요청할 때 시작된다. 요청 받은 사람은 필요한 지식이나 서비스를 제공하는 것으로 요청에 응답한다.
  • 협력은 다수의 요청과 응답의 흐름으로 구성된다.

재판 이야기

'앨리스가 재판장에 도착했을 때 하트 왕과 하트 여왕은 옥좌에 앉아 있었다.
...중략...
판사는 다름아닌 왕이었다.
"첫 번째 목격자를 불러라."
왕이 명령하자 하얀토끼는 트럼펫을 세 번 불고 큰 소리로 목격자를 불렀다.
첫 번째 목격자는 모자 장수였다. 그는 한 손에는 찻잔을, 다른 손에는 버터 바른 빵 한 조각을 들고 입
장했다.
“증언하라."
왕이 명령하자 모자 장수는 벌벌 떨며 자기 자신에 대해 설명하기 시작했다. 모자 장수는 재판과 상관이 없는 이야기만 중언부언 떠들었다. 불쌍한 모자 장수는 찻잔과 빵을 떨어뜨리고 한쪽 무릎을 꿇었다.
"저는 보잘것없는 사람입니다. 폐하.”
"너는 정말 보잘것없는 증인이로구나."
왕이 말했다.
"네가 아는게 그것뿐이라면 내려와 가도 좋다"
왕이 허락하자 모자 장수는 신발을 신을 틈도 없이 서둘러 법정을 빠져나갔다.'

  • 많은 등장인물들이 모여 있는 이유 : 하트 잭을 재판하기 위해서 (협력)

  • 왕이 모자 장수로부터 증언을 듣는 과정

    • 누군가 왕에게 재판을 요청
    • 왕이 하얀 토끼에게 증인을 부를 것을 요청
    • 왕의 요청을 받은 토끼는 모자 장수에게 증인석으로 입장할 것을 요청
    • 모자 장수는 증인석에 입장함으로써 토끼의 요청에 응답
    • 모자 장수의 입장은 왕이 토끼에게 요청했던 증인 호출에 대한 응답이기도함
    • 왕은 모자 장수에게 증언할 것을 요청
    • 모자 장수는 자신이 알고 있는 내용을 증언함으로써 왕의 요청에 응답

  • 어떤 등장 인물이 특정한 요청을 받아들일 수 있는 이유는 그 요청에 대해 적절한 방식으로 응답하는데 필요한 지식과 행동 방식을 가지고 있기 때문.

  • 요청과 응답은 협력에 참여하는 객체가 수행할 책임을 정의한다.

책임

  • 어떤 객체가 어떤 요청에 대해 대답해 줄 수 있거나, 적절한 행동을 할 의무가 있는 경우 해당 객체가 책임을 가진다고함.
  • 책임 = 객체지향 설계의 가장 중요한 재료
  • 책입의 분류
    • 하는 것 (doing)
      • 객체를 생성하거나 계산을 하느 등의 스스로 하는 것
      • 다른 객체의 행동을 시작시키는 것
      • 다른 객체의 활동을 제어하고 조절하는 것
    • 아는 것 (knowing)
      • 개인적인 정보에 관해 아는 것
      • 관련된 객체에 관해 아는 것
      • 자신이 유도하거나 계산할 수 있는 것에 관해 아는것
  • 책임은 객체의 공용 인터페이스(interface)를 구성한다.

책임과 메시지

  • 객체는 다른 객체로부터 요청이 전송됐을 경우에만 자신에게 주어진 책임을 수행한다.
  • 학 객체가 다른 객체에게 주어진 책임을 수행하도록 요청을 보내는 것을 메시지 전송(message-send)이라고 한다.
  • 송신자 : 보내는 객체
  • 수신자 : 받는 객체
  • 메시지 = 협력을 위해 한 객체가 다른 객체로 접근할 수 있는 유일한 방법
  • but, 책임과 메시지의 수준이 같지 않다.
    • 책임 : 객체가 협력에 참여하기 위해 수행해야 하는 행위를 상위 수준에서 개략적으로 서술한 것
    • 메시지로 변환되면 하나의 책임이 여러 메시지로 분할될 수 있음

역할 : 책임의 집합이 의미하는 것

  • 어떤 객체가 수행하는 책임의 집합은 객체가 협력 안에서 수행하는 역할을 암시한다.


    모자 장수는 증언을 마치고 나서 쏜살같이 법정을 빠져나갔다.
    "다음 증인을 불러라"
    왕이 하얀 토끼에게 명령했다. 다음 증인은 공작 부인의 요리사였다.
    “증언하라."
    왕이 말했다.
    "싫어요."
    왕이 근심스러운 얼굴로 하얀 토끼를 쳐다보자 토끼가 나지막이 속삭였다.
    "반드시 심문해야 할 목격자입니다."
    "글쎄, 반드시 그래야만 한다면 해야겠지."
    그때 뒤에서 산쥐가 요리사의 증언을 방해하자 얼마 동안 법정 안이 술렁거렸다. 결국 산쥐가 법정 밖으
    로 끌려나가고 법정이 다시 진정됐을 때는 요리사는 사라지고 없었다.
    왕이 크게, 안심한 목소리로 하얀 토끼에게 다시 명령했다.
    "신경 쓸 것 없다! 다음 증인을 불러라."
    그리고 왕은 목소리를 낮춰서 여왕에게 말했다.
    “그런데 여보, 다음 증인은 당신이 심문해야만 되겠소. 나는 머리가 너무 아파졌다오."
    앨리스는 하얀 토끼가 두루마리를 만지작거리는 것을 지켜보면서, 다음 증인이 어떨지 매우 궁금해했다.
    그런데 놀랍게도, 하얀 토끼가 작고 가느다란 목소리를 한껏 높여서 부른 이름은 '앨리스'였다. 증인석에 입장한 앨리스의 귓가에 어김없이 커다란 목소리가 들려왔다.
    “증언하라!"

  • 재판중 3번의 증언 과정 모두가 완벽하게 동일하다.

  • 차이점은 오직 왕 대신 여왕이, 모자장수 대신 요리사, 앨리스가 협력에 참여하는것이다.

  • 판사와 증인이라는 역할을 사용하면 세 협력을 모두 포괄할 수 있는 하나의 협력으로 추상화 할 수 있다.

  • 역할을 대체하기 위해서는 각 역할이 수신할 수 있는 메시지를 동일한 방식으로 이해해야 한다. (동일한 메시지를 이해할 수 있는 객체)

  • 역할의 큰가치는 하나의 협력 안에 여러 종류의 객체가 참여할 수 있게 함으로써 협력을 추상화할 수 있다.
  • 이로써 객체지향 설계의 단순서으 유연성, 재사용성이 뒷받침 된다.

객체지향 설계 기법

  1. 책임-주도 설계 (Responsibility-Driven Design)
  • 시스템의 기능은 더 작은 규모의 책임으로 분할되고 각 책임은 책임을 수행할 적절한 객체에게 할당된다.
  • 자신이 스스로 처리할 수 없는 정보나 기능이 필요하면 적절한 객체 또는 역할을 찾아 요청한다.
  • 시스템의 책임을 객체의 책임으로 변환하고, 각 객체가 책임을 수행하는 중에 필요한 정보나 서비스를 제공해줄 협력자를 찾아 책임을 할당하는 방식으로 협력 공동체를 생성한다.
    • 시스템이 사용자에게 제공해야하는 기능적인 시스템 책임을 파악한다.
    • 시스템 책임을 더 작은 책임으로 분할한다.
    • 분할된 책임을 수행할 수 있는 적절한 객체 또는 역할에 할당한다.
    • 객체 또는 역할들이 협력하게 한다.
  1. 디자인 패턴 (Design Pattern)
  • 공통으로 사용할 수 있는 역할, 책임, 협력의 템플릿이다.
  1. 테스트-주도 개발 (Test-Driven Development)
  • 객체가 이미 존재한다고 가정하고 객체에게 어떤 메시지를 전송할 것인지에 대해 먼저 생각한다.
  • 다양한 설계 경험과 패턴에 대한 지식, 객체지향에 대한 깊이있는 지식이 요구된다.
profile
나는 개발자다. 5000만큼 코딩한다.

0개의 댓글