본문 바로가기

IT Books Review/객체지향의 사실과 오해8

[Book] 객체지향의 사실과 오해 - 최종편 (부록) 추상화 기법 추상화는 도메인의 복잡성을 단순화하고 직관적인 멘탈 모델을 만드는 데 사용할 수 있는 가장 기본적인 인지 수단이다. 특성을 공유하는 객체들을 동일한 타입으로 분류하는 것은 객체지향 패러다임에서 사용하는 추상화 기법의 한 예다. 중요한 추상화 기법의 종류 분류와 인스턴스화 분류는 객체의 구체적인 세부 사항을 숨기고 인스턴스 간에 공유하는 공통적인 특성을 기반으로 범주를 형성하는 과정 분류의 역은 범주로부터 객체를 생성하는 인스턴스화 과정이다. 일반화와 특수화 일반화는 범주 사이의 차이를 숨기고 범주 간에 공유하는 공통적인 특성을 강조 일반화의 역을 특수화라고 한다. 집합과 분해 집합은 부분과 관련된 세부 사항을 숨기고, 부분을 사용해서 전체를 형성하는 과정을 가리킨다. 집합의 반대 과정은 전체.. 2023. 4. 12.
[Book] 객체지향의 사실과 오해 - 7장. 함께 모으기 마틴 파울러는 객체지향 설계 안에 존재하는 세 가지 상호 연관된 관점에 관해 설명한다. 파울러는 세 가지 관점을 각각 개념 관점, 명세 관점, 구현 관점이라고 부른다. 개념 관점(Conceptual Perspective)에서 설계는 도메인 안에 존재하는 개념과 개념들 사이의 관계를 표현한다. 도메인: 사용자들이 관심을 가지고 있는 특정 분야나 주제를 말함 소프트웨어는 도메인에 존재하는 문제를 해결하기 위해 개발된다. 명세 관점(Specification Perspective)은 도메인의 개념이 아니라 실제로 소프트웨어 안에서 살아 숨쉬는 객체들의 책임에 초점을 맞추게 된다. 즉 객체의 인터페이스를 바라보게 된다. 명세 관점에서 프로그래머는 객체가 협력을 위해 '무엇'을 할 수 있는가에 초점을 맞춤 인터페이.. 2023. 4. 4.
[Book] 객체지향의 사실과 오해 - 6장. 객체 지도 객체 지도 지도는 실세계의 지형을 기반으로 만들어진 추상화된 모델 지도 은유의 핵심은 기능이 아니라 구조를 기반으로 모델을 구축하는 편이 좀 더 범용적이고 이해하기 쉬우며 변경에 안정적이라는 것이다. 자주 변경되는 기능이 아니라 안정적인 구조를 따라 역할, 책임, 협력을 구성하라 기능 설계 대 구조 설계 모든 소프트웨어 제품의 설계에는 두 가지 측면이 존해한다. 하나는 기능(function) 측면의 설계이고 다른 하나는 구조(structure) 측면의 설계이다. 기능 측면의 설계는 제품이 사용자를 위해 무엇을 할 수 있는지에 초점을 맞춘다. 구조 측면의 설계는 제품의 형태가 어떠해야 하는지에 초점을 맞춘다. 좋은 설계는 나중에라도 변경할 수 있는 여지를 남겨 놓는 설계다. 지도 은유를 통해 살펴본 것처럼.. 2023. 4. 4.
[Book] 객체지향의 사실과 오해 - 5장. 책임과 메시지 자율적인 책임 설계의 품질을 좌우하는 책임 객체지향 공동체를 구성하는 기본 단위는 '자율적'인 객체 객체들은 애플리케이션의 기능을 구현하기 위해 협력하고 협력 과정에서 각자 맡은 바 책임을 다하기 위해 자율적으로 판단하고 행동함 객체가 어떤 행동을 하는 유일한 이유는 다른 객체로부터 요청을 수신했기 때문 요청을 처리하기 위해 객체가 수행하는 행동을 책임이라고 한다. 따라서 자율적인 객체란 스스로의 의지와 판단에 따라 각자 맡은 책임을 수행하는 객체를 의미 자신의 의지에 따라 증언할 수 있는 자유 객체가 책임을 자율적으로 수행하기 위해서는 객체에게 할당되는 책임이 자율적이어야 한다. 재판 과정을 예시로 들면 판사는 목격자에게 '증언하라'는 요청을 전송한다. 요청은 수신자의 책임을 암시하므로 목격자는 재판이.. 2023. 4. 4.
[Book] 객체지향의 사실과 오해 - 4장. 역할, 책임, 협력 역할, 책임, 협력 객체지향에 갓 입문한 사람들의 가장 흔한 실수는 '협력'이라는 문맥을 고려하지 않은 채 객체가 가져야할 상태와 행동부터 고민하는 것이다. 중요한 것은 개별 객체가 아니라 객체들 사이에 이뤄지는 협력이다. 객체지향 설계의 전체적인 품질을 결정하는 것은 개별 객체들의 품질이 아니라 여러 객체들이 모여 이뤄내는 협력의 품질이다. 협력 협력의 예시: ex) 재판 협력은 다수의 '요청'과 '응답'으로 구성되며 전체적으로 협력은 다수의 연쇄적인 요청과 응답의 흐름으로 구성된다. 객체지향의 세계: 동일한 목적을 달성하기 위해 협력하는 객체들의 공동체 어떤 객체가 특정한 요청을 받아들일 수 있는 이유는 그 요청에 대해 적절한 방식으로 응답하는데 필요한 지식.. 2023. 3. 30.
[Book] 객체지향의 사실과 오해 - 3장. 타입과 추상화 타입과 추상화 추상화의 예시 ex) 해리 벡의 지하철 노선도 지하철 노선도는 불필요한 지형 정보를 제거함으로써 단순함을 달성한 추성화의 훌륭한 예 지하철 노선도를 통해 알 수 있는 것처럼 훌륭한 추상화는 목적에 부합하는 것이어야 한다. 추상화 어떤 양상, 세부 사항, 구조를 좀 더 명확하게 이해하기 위해 특정 절차나 물체를 의도적으로 생략하거나 감춤으로써 복잡도를 극복하는 방법 복잡성을 다루기 위해 추상화는 두 차원에서 이뤄진다. 첫번째 차원은 구체적인 사물들 간의 공통점은 취하고 차이점은 버리는 일반화를 통해 단순하게 만드는 것 두번째 차원은 중요한 부분을 강조하기 위해 불필요한 세부 사항을 제거함으로써 단순하게 만드는 것 모든 경우에 추상화의 목적은 복잡성을 이해하기 쉬운 수준으로 단순화하는 것이라는.. 2023. 3. 29.
[Book] 객체지향의 사실과 오해 - 2장. 이상한 나라의 객체 객체지향과 인지 능력 인간은 본능적으로 세상을 독립적이고 식별 가능한 객체의 집합으로 바라본다. 많은 사람들이 객체지향을 직관적이고 이해하기 쉬운 패러다임이라고 말하는 이유는 객체지향이 세상을 자율적이고 독립적인 객체들로 분해할 수 있는 인간의 기본적인 인지 능력에 기반을 두고 있기 때문이다. 그러나 인간의 인지 능력은 물리적인 한계를 넘어 개념적으로 경계지을 수 있는 추상적인 사물까지도 객체로 인식할 수 있게 한다. 주문과 계좌 이체는 비록 물리적인 실체는 존재하지 않더라도 인간이 쉽게 구분하고 하나의 단위로 인지할 수 있는 개념적인 객체의 일종이다. 즉 객체란 인간이 분명하게 인지하고 구별할 수 있는 물리적인 또는 개념적인 경계를 지닌 어떤 것이다. "객체지향 패러다임은 인간이 인지할 수 있는 다양한.. 2023. 3. 29.
[Book] 객체지향의 사실과 오해 - 1장. 협력하는 객체들의 공동체 1장. 협력하는 객체들의 공동체 객체지향 객체지향 프로그래밍이란 현실 속에 존재하는 사물을 최대한 유사하게 모방해 소프트웨어 내부로 옮겨오는 작업 그 결과물인 객체지향 소프트웨어는 실세계의 투영이며, 객체란 현실 세계에 존재하는 사물에 대한 추상화 아쉽게도 실세계의 모방이라는 개념은 유연하고 실용적인 관점에서 객체지향 분석, 설계를 설명하기에는 적합하지 않음 객체지향의 목표는 실세계를 모방하는 것이 아니라 오히려 새로운 세계를 창조하는 것 소프트웨어 개발자의 역할은 단순히 실세계를 소프트웨어 안으로 옮겨담는 것이 아니라 고객과 사용자를 만족시킬 수 있는 신세계를 창조하는 것 커피 공화국의 아침 커피를 주문하고 제조하는 과정은 역할, 책임, 협력이라는 세 가지 개념이 한데 어울려 조화를 이루며 만들어 낸 .. 2022. 5. 24.