객체지향의 사실과 오해 스터디 7

[객체지향의 사실과 오해] Chapter 7

함께 모으기 객체지향 세 가지 상호 연관된 관점 개념 관점 도메인 안에 존재하는 개념과 개념들 사이의 관계를 표현함 실제 도메인의 규칙과 제약을 최대한 유사하게 반영하는 것이 핵심 명세 관점 도메인 영역을 벗어나 소프트웨어로 초점이 옮겨짐 객체들의 책임에 초점을 맞춤 객체가 협력을 위해 '무엇'을 할 수 있는가에 초점 구현 관점 실제 작업을 수행하는 코드와 연관됨 객체의 책임을 '어떻게' 수행할 것인가에 초점 개념 -> 명세 -> 구현 관점 순서대로 소프트웨어 개발이 아님!(x) 세 가지 다른 방향에서 바라보는 것을 의미함 동시에 세 가지 관점을 쉽게 식별할 수 있어야 함 다음 간단한 예시로 두가지 목표를 달성할 것 도메인 모델에서 시작해서 최종 코드까지의 구현 과정 간략히 구현 클래스를 개념 관점, 명..

[객체지향의 사실과 오해] Chapter 6

객체 지도 길을 모른다고 가정할 때, 길을 물어보는 방법 2가지 1. 길을 직접 알려주는 방법 : 가는 경로를 단계별로 상세히 설명함 -> 기능적이고 해결책 지향적인 접근법 2. 지도를 이용해 길을 찾는 방법 : 지도를 기반으로 설명 -> 구조적이고 문제 지향적인 접근법 지도는 범용적임 : 원하는 '기능'에 비해 지도에 표시된 '구조'가 더 안정적이므로 저자가 하고싶은 말 - 전통적인 소프트웨어 개발 방법 : 변경이 빈번히 발생하는 기능에 안정적인 구조를 종속시키는 길을 묻는 방법과 유사 - 객체지향 개발 방법 : 안정적인 구조에 변경이 빈번하게 발생하는 기능을 종속시키는 지도의 방법과 유사 이번장에서는 기능이 아니라 구조를 바탕으로 시스템을 분할하는 객체지향의 또 다른 측면에 관해 설명한다. 안정적인 ..

[객체지향의 사실과 오해] Chapter 5

책임과 메시지 저자가 어떤 상황예시를 들려준다. 어떤 위급한 상황이 발생했을 때 단 둘이 있을 때와 여러명이 있을 때 책임감의 차이가 있다는 것이다. 여러명일 수록 책임감이 분산된다. 책임감이 분산될 수록 책임을 무시하려고 한다. 자신에게 명확한 책임이 없는 경우 타인의 책임으로 간주한다. 여기서 얘기하고자 하는 바는 훌륭한 객체지향 세계는 명확하게 정의된 역할과 책임을 지닌 객체들이 상호 협력하는 세계다. 자율적인 책임 설계의 품질을 좌우하는 책임 객체지향의 구성 기본 단위 == 자율적인 객체 만약, A 객체 요청 송신 -> B 객체 요청 수신 -> B 객체 행동 == 책임 적절한 책임의 선택 -> 전체 설계의 방향 자신의 의지에 따라 증언할 수 있는 자유 객체가 책임을 자율적으로 수행하기 위해, 객체..

[객체지향의 사실과 오해] Chapter 4

역할, 책임, 협력 저자는 하나의 실험으로 인간을 바라보는 두 가지 관점의 충돌을 설명한다. 원래 인간의 본연의 특성은 이기적이고 합리적인 존재이다. 하지만 타인과 관계를 맺는 과정 속에서 본연의 특성을 배제하고 자신의 이익을 최소화하는 불합리한 선택을 하게 된다. 즉, 어떤 상황에 처해 있는지가 인간의 행동을 결정한다는 것이다. 저자가 말하고자 하는바는, 타인과의 협력속에서는 각 개인의 반응을 관찰하는 것은 의미가 없고 협력이라는 문맥이 인간의 행동 방식을 결정한다는 것이다. 객체의 모양을 빚는 것은 객체가 참여하는 협력이다. 협력을 먼저 고려하면서 그 협력에 참여하는 객체들의 행동들을 생각하고, 이후 그 행동들로 상태를 결정하는 순서라고 생각 정리를 했다. 이번 장에서 역할, 책임, 협력의 개념에 대..

[객체지향의 사실과 오해] Chapter 3

타입과 추상화 초창기 지하철 노선도는 최대한 사실적으로 지형을 묘사하려 했지만 중요한 것은 그게 아니다. 지하철을 이용하는 승객의 목적은 하나의 역에서 다른 역으로 이동하는 것이다. 따라서 어떤 역에서 출발,환승을 해야 하는지, 어떤 역을 거쳐야 가장 쉽고 빠르게 목적지에 도착할 수 있는지가 중요하다. 그래서 지형의 정확성보다는 필요한 목적에 집중한 결과가 현재까지도 적용되고 있는 지하철 노선도이다. 여기서 저자는 지하철 노선의 추상화에 대해 소개 해 주고 싶었던 것 같다. 추상화를 통한 복잡성 극복 추상화의 목적은 불필요한 부분을 무시함으로써 현실에 존재하는 복잡성을 극복하는 것이다. 지하철 노선도 예시를 통해서 알 수 있듯이 지형 정보를 제거하고 역 사이의 연결성을 강조함으로써 승객들의 목적에 맞게 ..

[객체지향의 사실과 오해] Chapter 2

이상한 나라의 객체 챕터의 도입부는 아기들의 객체 인지에 대한 소개로 시작한다. 가림막 뒤에 막대 두개를 동일한 방향으로 움직이게 하면서 지루할 때까지 반복한다. 가림막을 치웠을 때 막대가 하나만 있다면 지루함으로 시선을 옮길 것이다. 만일 두개의 짧은 막대로 나타난다면 아기는 놀란 나머지 오랜 시간 동안 막대를 쳐다볼 것이다. 여기서 얘기하고자 하는 바는 태어난지 얼마 안된 사람도 뚜렷한 경계를 가지고 함께 행동하는 물체를 하나의 개념으로 인지한다는 사실이다. 아기들 역시 뚜렷한 경계를 가진 객체들의 집합으로 세상을 바라본다. 객체지향의 인지 능력 많은 사람들이 객체지향을 직관적이고 이해하기 쉬운 패러다임이라고 말하는 이유는 인간의 기본적인 인지 능력에 기반을 두고 있기 때문이다. 예를 들어 컴퓨터, ..

[객체지향의 사실과 오해] Chapter 1

우리가 생각한 객체란 현실 세계에 존재하는 사물에 대한 추상화라는 것이다. 자바에서 객체에 대하여 처음 배울 때 보통 실사물에 빗대어 예시를 들어줬다. 예를 들어 자바의 정석에서 Tv와 리모컨과의 객체 관계를 많이 설명해 줬었다. 아쉽게도 실세계의 모방이라는 개념은 객체지향의 기반을 이루는 철학적인 개념을 설명하는 데는 적합하지만 유연하고 실용적인 관점에서 객체지향 분석, 설계를 설명하기에는 적합하지 않다. 이 부분을 읽으면서 꽤 흥미로웠다. 위에서 설명한 것처럼 실세계의 사물에 대한 모방을 개념으로 학습했으니까.. 그럼 저자는 왜 이런 말을 했을까? 소프트웨어 개발자의 역할은 단순히 실세계를 소프트웨어 안으로 옮겨 담는 것이 아니라 고객과 사용자를 만족 시킬 수 있는 신세계를 창조해야 하는 것이다. 그..