티스토리 뷰

이상한 나라의 앨리스 이야기

🏰 이상한 나라의 앨리스 내용 요약
앨리스가 재판장에 도착했을때 하트 왕과 하트 여왕은 옥좌에 앉아 있었다. 그리고 주위에는 온갖 종류의 새와 짐승과 한 벌의 카드가 모여 있었으며 그들 앞에 파이를 훔쳤다는 혐의를 받고 있는 하트 잭이 서 있었다.

”첫 번째 목격자를 불러라” 하트 왕이 명령하자 하얀 토끼는 트럼펫을 불고 큰 소리로 목격자를 불렀다. 첫번째 목격자는 모자 장수였다.
”증언하라”
왕이 명령하자 모자 장수는 벌벌 떨며 자기 자신에 대해 설명하기 시작했다.

”네가 아는게 그것뿐이라면 이제 증인석에서 내려가도 좋다”
왕이 허락하자 모자 장수는 신발을 신을 틈도 없이 서둘어 법정을 빠져나갔다.

재판속의 협력

협력 UML

책임

  • 어떤 객체가 어떤 요청에 대해 대답해 줄 수 있거나, 적절한 행동을 할 의무가 있는 경우 해당 객체가 책임을 가진다고 말한다. ex) 왕은 ‘재판을 수행하라’는 요청에 응답해야 하므로 ‘재판을 수행할’ 책임을 지게됨
  • 객체지향 개발에서 가장 중요한 능력은 책임을 능숙하게 객체에 할당하는 것
  • 책임을 어떻게 구현할 것인가 하는 문제는 객체와 책임이 제자리를 잡은 후에 고려해도 늦지 않음

책임과 메시지

  • 협력 안에서 객체는 다른 객체로부터 요청이 전송됐을 경우만 주어진 책임을 수행함
  • 객체가 다른 객체에게 주어인 책임을 수행하도록 요청을 보내는 것을 메시지 전송이라고 함
  • 책임: 협력이라는 문맥속에서 무엇을 할 수 있는지를 나열하는 것
  • 메시지: 두 객체 사이의 관계를 강조한 것
  • 객체지향 설계는 협력에 참여하기 위해 어떤 객체가 어떤 책임을 수행해야 하고 어떤 객체로부터 메시지를 수신할 것인지를 결정하는 것부터 시작됨

역할

  • 어떤 객체가 수행하는 책임의 집합은 객체가 협력 안에서 수행하는 역할을 암시함
  • 역할은 재사용 가능하고 유연한 객체지향 설계를 낳는 중요한 구성요소임
🏰 이상한 나라의 앨리스 내용 요약2
(위 내용 이어서)
”다음 증인을 불러라”
왕이 하얀 토끼에게 명령했다. 다음 증인은 공작 부인의 요리사였다.
”증언하라”

”다음 증인을 불러라”
그리고 왕은 목소리를 낮춰서 여왕에게 말했다.
”그런데 여보 다음 증인은 당신이 심문해야겠소. 나는 머리가 너무 아파졌다오”
토끼는 목소리를 한껏 높여서 부른 이름은 앨리스였다!
”증언하라”
  • 위 이야기에서의 차이점은 모자 장수 대신 요리사와 앨리스가 증인으로 출석한점, 왕에서 여왕으로 재판관이 변경된점 이외의 전체적인 재판 과정의 흐름은 매우 유사함
  • ‘판사’, ‘증인’이라는 역할을 사용하면 세 가지 협력(모자 장수, 요리사, 앨리스 심문) 모두 포괄할 수 있는 하나의 협력으로 추상화 가능

  • 역할을 이용해 협력을 추상화했기 때문에 역할을 수행할 수 있는 어떤 객체라도 협력에 참여할 수 있음
  • 다만, 역할을 대체할 수 있는 객체는 동일한 메시지를 이해할 수 있는 객체로 한정됨 ex) 증인역할의 경우 ‘증인석 입장’과 ‘증언’이라는 메시지를 수신(행동)할 수 있는 객체만 한정됨

역할의 개념 및 특징

  • 단순성: 유사한 협력을 추상화해서 인지 과부하를 줄일 수 있음
  • 유연성: 다양한 객체들이 협력에 참여할수 있음
  • 재사용성: 다양한 객체들이 동일한 협력에 참여할 수 있음

협력의 추상화

  • 역할의 큰 가치는 하나의 협력 안에 여러 종류의 객체가 참여할 수 있게함 (추상화)
  • 구체적인 객체를 추상적인 역할로 대체함으로써 협력을 단순화함
  • ex) ‘왕-토끼-모자장수’, ‘왕-토끼-요리사’, ‘여왕-토끼-앨리스’의 협력을 추상적인 역할로 대체함으로써 ‘판사-토끼-증인’의 협력으로 대체 가능

대체 가능성

  • 객체가 역할을 대체 가능하기 위해서는 협력 안에서 역할이 수행하는 모든 책임(행동)을 동일하게 수행할 수 있어야 함
  • 객체가 역할에 주어진 책임 이외에 다른 책임도 수행할 수 있음 ex) 판사 역할을 수행하는 왕은 국정을 돌보는 책임도 있음

객체의 모양을 결정하는 협력

흔한 오류

  • 중요한것은 정적인 클래스가 아닌 협력에 참여하는 동적인 객체
  • 클래스는 단지 객체를 표현하고 생성하기 위해 언어가 제공하는 구현 메커니즘

협력을 따라 흐르는 객체의 책임

  • 올바른 객체를 설계하기 위해서는 견고하고 깔끔한 협력을 설계해야함
    • 협력을 설계한다는 것은 객체들이 주고받은 요청과 응답의 흐름을 결정하는것
  • 객체 설계 순서
    1. 객체에게 책임을 할당하면 책임은 외부에 제공하는 행동이 됨
    2. 행동(책임)을 결정한 후에 행동을 수행하는데 필요한 데이터를 고민하면 됨
    3. 필요한 행동과 데이터가 결정되면 그후에 클래스 구현 방법을 결정함

객체지향 설계 기법

책임 주도 설계

  • 객체의 책임을 중심으로 시스테을 구축하는 설계 방법

설계 절차

  1. 시스템이 사용자에게 제공해야 하는 기능인 시스템 책임 파악
  2. 시스템 책임을 더 작은 책임으로 분할
  3. 분할된 책임을 수행할 수 있는 적절한 객체 또는 역할을 찾아 할당
  4. 객체가 책임(역할)을 수행하는 중에 다른 객체의 도움이 필요한 경우 이를 책임질 적절한 객체(역할)을 파악
  5. 해당 객체(역할)에게 책임을 할당함으로써 두 객체가 협력하게 함
역할, 책임, 협력은 유연하고 견고한 객체지향 시스템을 만드는데 가장 중요한 재료임

 

댓글