Study/[Panda] 객체지향의 사실과 오해 5

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

마틴 파울러가 제시한 객체지향 설계는 세 가지 상호 연관된 관점인 개념 관점, 명세 관점, 구현 관점을 통해 소프트웨어 개발을 바라보는 방식을 제공한다. 각 관점은 동일한 객체를 다른 시각에서 이해하는 방법으로, 설계의 핵심 요소가 된다. 이 글에서는 이 세 가지 관점을 커피 전문점의 예시를 통해 설명하고, 코드와 함께 이를 구체화한다. 1. 개념 관점 (Conceptual Perspective)개념 관점은 도메인에 존재하는 개념과 그 개념들 사이의 관계를 반영하는 데 중점을 둔다. 도메인이란 사용자가 관심을 갖는 특정 주제나 문제 영역을 의미하며, 소프트웨어는 이를 해결하기 위해 개발된다. 이 관점에서는 소프트웨어 객체들이 현실 세계의 개념을 얼마나 잘 반영하느냐가 중요하다.커피 전문점을 예시로 들면,..

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

4장 역할, 책임, 협력 최후통첩 게임은 인간을 바라보는 두 가지 관점의 충돌을 잘 설명해준다.인간의 본연적 특성에서 인간은 이기적이고 합리적인존재이지만 타인과 관계를 맺는 과정 속에서 인간은 본연의 특성을 배제하고 자신의 이익을 최소화하는 불합리한 선택을 하기도 한다는 것이다.인간의 행동을 결정하는 것은 인간의 본질적인 특성이 아니라 각 개인이 처해 있는 정황 또는 문이다.여기서 문맥은 타인과의 협력이다. 협력에 얼마나 적절한지에 따라 행동의 적합성이 결정되며 협력이 인간의 행동 방식을 결정한다. 객체의 세계에서도 마찬가지이다.개별 객체가 아니라 객체들 사이에 이루어지는 협력이 중요하다. 객체지향 설계의 전체적인 품질을 결정하는 것은 개별 객체의 품질이 아니라 여러 객체들이 모여 이뤄내는 협력의 품질이..

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

03. 타입과 추상화 책은 지하철 노선도를 추상화한 해리 백 이야기로 시작한다.승객들이 지하철을 쉽게 이용할 수 있는 이유 중 하는 단순하고 직관적으로 역 간의 네트워크를 표현하는 지하철 노선도가 있기 때문이다. 초기 지하철 노선도는 실제와 유사한 물리적 지형 위에 운행 노선과 불규칙적인 역간 거리를 사실적으로 묘사했다. 그러나 이런 사실적인 정보는 승객들이 노선도를 이해하기 어렵게 만들었다.지하철을 이용하는 승객들의 목적은 하나의 역에서 다른 역으로 이동하는 것이기에 어떤 역에서 출발 및 환승을 해야하는지, 어떤 역을 거쳐야만 가장 쉽고 빠르게 목적지에 도착할 수 있는지 등을 직관적이고 단순하게 보여주는 것이 중요하다. 즉 지하철 노선도 디자인에서 중요한 것은 사실적인 묘사가 아니라 역과 역 사이의 연..

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

2장 이상한 나라의 객체객체지향과 인지능력소프트웨어 세계 역시 인간이 인지할 수 있는 다양한 객체들이 모여 구성되지만 객체지향 패러다임의 목적은 현실 세계를 기반으로 새로운 세계를 창조하는 것이기 때문에 두 세계에 존재하는 객체를 일반적으로 서로 전혀 다른 모습을 보인다.  이번 장은 심리학자인 엘리자베스 스펠크와 필립 켈만이 어린 아기들이 물체를 인지하는 방법을 연구하기 위해 실행한 실험으로 시작한다. 이 실험으로 알 수 있는 것은 사람은 태어난지 얼마 안 된 시기부터 함께 행동하는 물체를 하나의 개념으로 인지한다는 사실이다.물체가 여러 부분으로 구성되어 있더라도 함께 움직일 경우 그 물체를 하나의 유기적인 단위로 인식한다는 것.인간의 인지능력은 물리적인 경계를 넘어 추상적인 사물까지도 객체로 인식한다..

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

실세계의 모방이라는 개념은 객체지향의 기반을 이루는 철학적인 개념을 설명하는 대는 적합하지만 실용적인 관점에서의 객체지향을 설명하기에는 적합하지 않다.애플리케이션을 개발하면서 객체에 직접적으로 대응되는 실세계의 사물을 발견할 확률 낮기 때문. 객체지향의 목표는 실세계를 모방하는 것이 아니라 새로운 세계를 창조하는 것이다.소프트웨어 개발자의 역할이 단순히 실세계를 소프트웨어 안으로 옮겨 담는 것이 아니라 고객과 사용자를 만족시킬 수 있는 신세계를 창조하는 것처럼 말이다. 그러나 실세계의 모방이라는 개념을 사용하면 '캡슐화'와 소프트웨어 객체의 '자율성' 등 객체지향의 다양한 측면을 쉽게 설명할 수 있다.현실 세계의 사람들이 암묵적인 약속과 명시적인 계약을 기반으로 협력하며 목표를 달성해 나가는 과정은 '메..