티스토리 뷰
728x90
이상한 나라의 앨리스 이야기
🏰 이상한 나라의 앨리스 내용 요약
앨리스가 재판장에 도착했을때 하트 왕과 하트 여왕은 옥좌에 앉아 있었다. 그리고 주위에는 온갖 종류의 새와 짐승과 한 벌의 카드가 모여 있었으며 그들 앞에 파이를 훔쳤다는 혐의를 받고 있는 하트 잭이 서 있었다.
…
”첫 번째 목격자를 불러라” 하트 왕이 명령하자 하얀 토끼는 트럼펫을 불고 큰 소리로 목격자를 불렀다. 첫번째 목격자는 모자 장수였다.
”증언하라”
왕이 명령하자 모자 장수는 벌벌 떨며 자기 자신에 대해 설명하기 시작했다.
…
”네가 아는게 그것뿐이라면 이제 증인석에서 내려가도 좋다”
왕이 허락하자 모자 장수는 신발을 신을 틈도 없이 서둘어 법정을 빠져나갔다.
재판속의 협력
협력 UML
책임
- 어떤 객체가 어떤 요청에 대해 대답해 줄 수 있거나, 적절한 행동을 할 의무가 있는 경우 해당 객체가 책임을 가진다고 말한다. ex) 왕은 ‘재판을 수행하라’는 요청에 응답해야 하므로 ‘재판을 수행할’ 책임을 지게됨
- 객체지향 개발에서 가장 중요한 능력은 책임을 능숙하게 객체에 할당하는 것
- 책임을 어떻게 구현할 것인가 하는 문제는 객체와 책임이 제자리를 잡은 후에 고려해도 늦지 않음
책임과 메시지
- 협력 안에서 객체는 다른 객체로부터 요청이 전송됐을 경우만 주어진 책임을 수행함
- 객체가 다른 객체에게 주어인 책임을 수행하도록 요청을 보내는 것을 메시지 전송이라고 함
- 책임: 협력이라는 문맥속에서 무엇을 할 수 있는지를 나열하는 것
- 메시지: 두 객체 사이의 관계를 강조한 것
- 객체지향 설계는 협력에 참여하기 위해 어떤 객체가 어떤 책임을 수행해야 하고 어떤 객체로부터 메시지를 수신할 것인지를 결정하는 것부터 시작됨
역할
- 어떤 객체가 수행하는 책임의 집합은 객체가 협력 안에서 수행하는 역할을 암시함
- 역할은 재사용 가능하고 유연한 객체지향 설계를 낳는 중요한 구성요소임
🏰 이상한 나라의 앨리스 내용 요약2
(위 내용 이어서)
”다음 증인을 불러라”
왕이 하얀 토끼에게 명령했다. 다음 증인은 공작 부인의 요리사였다.
”증언하라”
…
”다음 증인을 불러라”
그리고 왕은 목소리를 낮춰서 여왕에게 말했다.
”그런데 여보 다음 증인은 당신이 심문해야겠소. 나는 머리가 너무 아파졌다오”
토끼는 목소리를 한껏 높여서 부른 이름은 앨리스였다!
”증언하라”
- 위 이야기에서의 차이점은 모자 장수 대신 요리사와 앨리스가 증인으로 출석한점, 왕에서 여왕으로 재판관이 변경된점 이외의 전체적인 재판 과정의 흐름은 매우 유사함
- ‘판사’, ‘증인’이라는 역할을 사용하면 세 가지 협력(모자 장수, 요리사, 앨리스 심문) 모두 포괄할 수 있는 하나의 협력으로 추상화 가능
- 역할을 이용해 협력을 추상화했기 때문에 역할을 수행할 수 있는 어떤 객체라도 협력에 참여할 수 있음
- 다만, 역할을 대체할 수 있는 객체는 동일한 메시지를 이해할 수 있는 객체로 한정됨 ex) 증인역할의 경우 ‘증인석 입장’과 ‘증언’이라는 메시지를 수신(행동)할 수 있는 객체만 한정됨
역할의 개념 및 특징
- 단순성: 유사한 협력을 추상화해서 인지 과부하를 줄일 수 있음
- 유연성: 다양한 객체들이 협력에 참여할수 있음
- 재사용성: 다양한 객체들이 동일한 협력에 참여할 수 있음
협력의 추상화
- 역할의 큰 가치는 하나의 협력 안에 여러 종류의 객체가 참여할 수 있게함 (추상화)
- 구체적인 객체를 추상적인 역할로 대체함으로써 협력을 단순화함
- ex) ‘왕-토끼-모자장수’, ‘왕-토끼-요리사’, ‘여왕-토끼-앨리스’의 협력을 추상적인 역할로 대체함으로써 ‘판사-토끼-증인’의 협력으로 대체 가능
대체 가능성
- 객체가 역할을 대체 가능하기 위해서는 협력 안에서 역할이 수행하는 모든 책임(행동)을 동일하게 수행할 수 있어야 함
- 객체가 역할에 주어진 책임 이외에 다른 책임도 수행할 수 있음 ex) 판사 역할을 수행하는 왕은 국정을 돌보는 책임도 있음
객체의 모양을 결정하는 협력
흔한 오류
- 중요한것은 정적인 클래스가 아닌 협력에 참여하는 동적인 객체
- 클래스는 단지 객체를 표현하고 생성하기 위해 언어가 제공하는 구현 메커니즘
협력을 따라 흐르는 객체의 책임
- 올바른 객체를 설계하기 위해서는 견고하고 깔끔한 협력을 설계해야함
- 협력을 설계한다는 것은 객체들이 주고받은 요청과 응답의 흐름을 결정하는것
- 객체 설계 순서
- 객체에게 책임을 할당하면 책임은 외부에 제공하는 행동이 됨
- 행동(책임)을 결정한 후에 행동을 수행하는데 필요한 데이터를 고민하면 됨
- 필요한 행동과 데이터가 결정되면 그후에 클래스 구현 방법을 결정함
객체지향 설계 기법
책임 주도 설계
- 객체의 책임을 중심으로 시스테을 구축하는 설계 방법
설계 절차
- 시스템이 사용자에게 제공해야 하는 기능인 시스템 책임 파악
- 시스템 책임을 더 작은 책임으로 분할
- 분할된 책임을 수행할 수 있는 적절한 객체 또는 역할을 찾아 할당
- 객체가 책임(역할)을 수행하는 중에 다른 객체의 도움이 필요한 경우 이를 책임질 적절한 객체(역할)을 파악
- 해당 객체(역할)에게 책임을 할당함으로써 두 객체가 협력하게 함
역할, 책임, 협력은 유연하고 견고한 객체지향 시스템을 만드는데 가장 중요한 재료임
728x90
'독서 > 객체지향의 사실과 오해' 카테고리의 다른 글
chapter6. 객체지도 (1) | 2023.12.22 |
---|---|
chapter5. 책임과 메시지 (1) | 2023.12.22 |
chapter3. 타입과 추상화 (0) | 2023.12.22 |
chapter2. 이상한 나라의 객체 (0) | 2023.12.22 |
chapter1. 협력하는 객체들의 공동체 (0) | 2023.12.22 |
댓글