본문 바로가기

기술 서적/객체지향의 사실과 오해

(5)
[객체지향의 사실과 오해] ch5. 책임과 메시지 우리가 학교에서 CPR 교육을 받을 때, 신고를 부탁하는 사람을 정확히 "지정"하라고 교육한다. 그 이유는 단순히 신고를 해달라는 부탁을 한다면, "누군가 신고하겠지"라는 마음으로 책임감이 분산되어 초기 대응이 불가하기 때문이다. 그렇기에 정확한 한 사람을 지정하여 그 사람에게 신고에 대한 책임을 부여하는 것을 장려한다. 객체의 세계도 마찬가지다. 훌륭한 객체지향의 세계는 명확하게 정의된 역할과 책임을 지닌 객체들이 상호 협력하는 세계이다. 자율적인 책임 >설계의 품질을 좌우하는 책임 책임 : 요청을 처리하기 위해 객체가 수행하는 행동 자율적인 객체 : 자신이 맡은 책임을 스스로의 판단에 따라 수행 ex) 앨리스의 일화 : 증언에 대한 what과 how의 요구 두가지 같은 요청이 있다. 1) 증언하라 2..
[객체지향의 사실과 오해] ch4. 역할, 책임, 협력 최후통첩 게임이라는 것이 있다. 연구팀은 사람들에게 일정 금액을 주고, 제안자는 금액 일부를 응답자와 나누어 가져야 한다. 제안자는 6:4, 7:3처럼 분배비율을 단 한번 제안할 수 있고 응답자는 제안을 수용하거나 거부할 수 있다. 수용하면 비율대로 금액을, 거부하면 둘다 상금을 받지 못한다. 인간이 합리적이라면 응답자는 단 1원이 떨어지는 분배비율에 대해서도 수용해야 한다. 반대로 제안자는 최대한 적은 비율을 응답자에게 제안할 것이다. 그러나, 실제 제안결과는 40%이상을 제안한 비율이 가장 높았다. 수용결과 또한 20%미만에 대해서는 제안을 거부했다. 이 실험은 인간은 '합리적'이라는 본질을 가지고 있는 것이 아니라, 상황(context)이 인간의 행동을 결정한다는 사실을 보여준다. 그러나, 객체설계..
[객체지향의 사실과 오해] ch3. 타입과 추상화 >>추상화 >> 추상화를 통한 복잡성 극복 추상화 : 현실에서 출발하되 불필요한 부분을 도려내가면서 사물의 놀라운 본질을 드러내는 과정 - 특정 절차나 물체를 의도적으로 생략하거나 감춤으로써 복잡도를 극복하는 방법 - 추상화의 수준, 이익, 가치는 목적에 의존적 >> 방법 2가지 1) 일반화 : 공통점을 취하고 차이점을 버림 2) 불필요한 세부사항을 제거 >>개념 : 객체를 분류하는 기준 - 공통점을 기반으로 객체들을 묶기 위한 그릇 => 개념을 기반으로 그룹으로 분류 => 개념 그룹 ∋ 개체 : 개체를 개념의 인스턴스라고 함 >> 개념의 3가지 관점 : 심볼 / 내연 / 외연 - 심볼 : 개념을 가리키는 간략한 이름이나 명칭 ex) 트럼프 - 내연 : 개념의 완전한 정의 / 내연의 의미를 이용해 객체가..
[객체지향의 사실과 오해] ch2. 이상한 나라의 객체 / 상태 -행동 -식별자 목차 1. 객체, 그리고 이상한 나라 2. 객체 : 상태+ 행동+식별자 3. 행동 초점의 객체 설계 : 행동이 상태를 결정한다 4. 소프트웨어는 현실의 모방이 아니다 : 의인화+은유 1. 객체, 그리고 이상한 나라 >> 앨리스 객체 - 앨리스의 상태(키)를 결정하는 것은 행동임 - 행동의 결과로 상태가 영향을 받음 - 행동의 성공여부(문을 열고 들어감)는 이전에 어떤 행동들이 발생했는지(음료, 케잌 등등)에 영향을 받음 요약 1) 앨리스는 상태를 가지며 상태는 변경가능하다 - 키/ 위치 등은 변경가능함 2) 앨리스의 상태를 변경시키는 것은 앨리스의 행동이다. - 행동의 결과는 상태에 의존하며 상태를 통해 서술가능하다 - 행동의 순서가 결과에 영향을 미친다. 3) 앨리스는 어떤 상태에 있더라도 유일하게 식..
[객체지향의 사실과 오해] ch1. 협력하는 객체들의 공동체/ 협력-역할-책임 목차 1. 서론 2. 기존의 객체지향 묘사 3. 객체의 3요소 : 협력, 역할, 책임 4. 협력 속에 사는 객체 5. 객체지향의 본질(핵심) 1. 서론 객체지향이란 무엇인가? => 이 질문에 대한 자신만의 견해를 가지는 것이 중요하다 => 그러나, 많은 개발자는 객체지향을 여전히 클래스나 상속을 중심으로 바라본다. 다음 책에서는 총 3가지 관점의 변화를 유도한다. 첫째, 클래스 중심 => 객체 중심 관점 둘째, 객체를 독립적 존재 => 협력적 존재로 바라보는 것 셋째, 객체에게 얼마나 적절한 역할과 책임을 부여하는가 => 궁극적으로 이 3가지 관점으로 프로그래밍 언어라는 틀에 어떻게 담아내는지가 중요하다 2. 기존의 객체지향 묘사 - 객체지향은 현실세계 사물의 추상화로 묘사되는 경우가 많다. - 그러나,..