Book/객체지향의 사실과 오해 (完)

    8. 추상화 기법 | 객체지향의 사실과 오해 8장 (END)

    8. 추상화 기법 | 객체지향의 사실과 오해 8장 (END)

    추상화? 추상화는 도메인의 복잡성을 단순화하고 직관적인 멘탈 모델을 만드는 데 사용할 수 있는 가장 기본적인 인지 수단이다. 분류와 인스턴스화 일반화와 특수화 집합과 분해 객체지향의 가장 큰 장점은 동일한 추상화 기법을 프로그램의 분석, 설계, 구현 단계에 걸쳐 일관성 있게 적용할 수 있다는 점이다. 분류와 인스턴스화 개념과 범주 개념: 속성과 행위가 유사한 객체에 공통적으로 적용되는 관념이나 아이디어 뷴류(범주로 묶는 것): 객체들의 특정 집합에 공통의 개념을 적용하는 것 (ex. 자동자 범주에 적용되는 개념: 바퀴를 이용해 사람을 운반하는 운송수단) 분류를 통해 개별 현상(객체)을 하나의 개념(타입)으로 다룰 수 있다. 즉, 분류는 객체와 타입 간의 관계를 나타낸 것이다. 분류의 역은 타입에 해당하는..

    7. 객체지향의 개념, 명세, 구현  | 객체지향의 사실과 오해 7장

    7. 객체지향의 개념, 명세, 구현 | 객체지향의 사실과 오해 7장

    마틴 파울러는 객체지향 설계 안에 존재하는 세 가지 상호 연관된 세 가지 관점을 설명했다. 1. 개념 관점 개념 관점에서 설계는 도메인 안에 존재하는 개념과 개념들 사이의 관계를 표현한다. 도메인은 특정 분야/주제이며, 소프트웨어는 도메인 내 문제를 해결하기 위해 개발된다. (ex. 커피 전문점, 재판장 등) 개념 관점은 사용자가 도메인을 바라보는 관점을 반영하기 때문에, 실제 도메인의 규칙과 제약을 최대한 유사하게 반영하는 것이 핵심이다. 2. 명세 관점 사용자의 영역인 도메인을 벗어나 개발자의 영역인 소프트웨어로 초점이 옮겨진다. 도메인의 개념이 아닌 실제 소프트웨어 내 객체들의 책임에 초점을 맞추어 객체의 인터페이스를 바라보게 된다. 프로그래머는 객체가 협력을 위해 '무엇'을 할 수 있는가에 초점을..

    6. 다이어그램으로 보는 도메인 모델 | 객체지향의 사실과 오해 6장

    6. 다이어그램으로 보는 도메인 모델 | 객체지향의 사실과 오해 6장

    길을 지나가는 사람에게 물어보는 방법은 기능적이고 해결책 지향적인 접근법, 길을 지도를 보고 찾아가는 방법은 구조적이고 문제 지향적인 접근법이다. 지도는 구체적인 기능이 아닌 구조를 제공하며, 다양한 목적을 위해 재사용될 수 있다. 지도는 기능에 비해 상대적으로 잘 변하지 않는 안정적인 지형 정보를 기반으로 하기 때문에, 요구사항이 변함에도 수용할 수 있다. 즉, 기능이 아니라 구조를 기반으로 모델을 구축하는 편이 좀 더 범용적이고 이해하기 쉬우며 변경에 안정적이다. 객체지향은 안정적인 구조를 기반으로 시스템을 구조화한다. 자주 변경되는 기능이 아니라 안정적인 구조를 따라 역할, 책임, 협력을 구성하라. 모든 소프트웨어 제품의 설계에는 기능과 구조의 측면이 존재하며 조화를 이루도록 해야 한다. 기능 측면..

    5. 코드로 보는 객체의 자율적인 책임 | 객체지향의 사실과 오해 5장

    5. 코드로 보는 객체의 자율적인 책임 | 객체지향의 사실과 오해 5장

    1. 협력에 참여하는 객체의 책임이 자율적이어야 한다. 자율적인 책임이 설계의 품질을 좌우한다 객체지향 공동체를 구성하는 기본 단위는 '자율적'인 객체다. 자율적인 객체란 스스로 정한 원칙에 따라 판단하고 스스로의 의지를 기반으로 행동하는 객체다. 객체가 어떤 행동을 하는 유일한 이유는 다른 객체로 부터 요청을 수신했기 때문이다. 요청을 처리하기 위해 객체가 수행하는 행동이 책임이다. 즉 자율적인 객체란 스스로의 의지와 판단에 따라 각자 맡은 책임을 수행하는 객체다. 적절한 책임이 자율적인 객체를 낳고, 자율적인 객체들이 모여 유연하고 단순한 협력을 낳는다. 객체에게 할당되는 책임은 자율적이어야 한다. class King implements Judge { listenToTestimony(trialHelp..

    4. 코드로 보는 객체의 협력 관계 | 객체지향의 사실과 오해 4장

    4. 코드로 보는 객체의 협력 관계 | 객체지향의 사실과 오해 4장

    최후통첩 게임은 인간을 바라보는 두 가지 관점의 충돌을 잘 설명한다. 인간이 가지고 있는 본연의 특성이라는 관점에서 인간은 이기적으로 합리적인 존재다. 그러나 타인과 관계를 맺는 과정 속에서 인간은 본연의 특성을 배제하고 자신의 이익을 최소화하는 불합리한 선택을 하게 된다. 결론적으로 인간이 어떤 본질적인 특성을 지니고 있느냐가 아니라 어떤 상황에 처해 있느냐가 인간의 행동을 결정한다. 즉, 각 개인이 처해 있는 정황 또는 문맥이 인간의 행동 방식을 결정한다. 객체의 세계에서도 협렵이라는 컨텍스트가 객체의 행동 방식을 결정한다. 객별적인 객체의 행동이나 상태가 아니라 객체들 간의 협력에 집중하자. 1. 협력 협력의 본질은 요청과 응답으로 연결되는 네트워크다. 협력은 한 객체가 다른 객체에게 도움을 요청할..

    3. 객체라는 추상화, 타입은 추상화 도구 | 객체지향의 사실과 오해 3장

    3. 객체라는 추상화, 타입은 추상화 도구 | 객체지향의 사실과 오해 3장

    추상화는 불필요한 부분을 무시함으로써 단순하게 만드는 것이다. 객체지향에서는 객체라는 추상화를 통해 복잡성을 극복한다. 객체들을 분류하는 것 또한 추상화다. 이 때 분류 장치가 되는 것이 개념(컨셉)이다. 타입은 개념이다. 불필요한 요소를 배제하여 정적인 모델을 다룰 수 있게 하는 추상화 도구다. 객체를 분류하는 기준은 타입(즉, 개념)이며, 이 타입을 나누는 기준은 객체의 행동이다. 타입을 구현하는 한 가지 대표적인 방법이 클래스다. (타입 != 클래스) 추상화를 통한 복잡성 극복 우리는 지하철을 편리하게 이용할 수 있다. 바로 단순하고 직관적인 지하철 노선도가 있기 때문이다. 우리는 지하철 노선도를 볼 때 사실적인 지형을 보진 않는다. 출발점과 환승점, 그리고 그 연결을 본다. 해리 벡은 이러한 목적..

    2. 객체의 행동이 상태를 결정한다 | 객체지향의 사실과 오해 2장

    2. 객체의 행동이 상태를 결정한다 | 객체지향의 사실과 오해 2장

    이상한 나라의 앨리스 객체 앨리스는 작은 문 너머 아름다운 정원으로 이동하고 싶다. 작은 문의 높이는 40cm이며, 현재 앨리스는 이보다 크다. 작은 문은 열쇠로 열 수 있는데, 너무 작은 사람은 이 열쇠를 사용할 수 없다. 앨리스는 케이크/버섯/음료를 먹거나, 부채질을 하는 행동을 통해 자신의 키를 변화시킬 수 있다. 여기서 앨리스를 객체로 생각해보자. 앨리스는 문을 통과하기에 적당한 상태로 자신의 키를 계속해서 변화시킨다. 특정 시점의 앨리스의 상태란 특정 시점에서의 앨리스의 키를 의미한다. 앨리스는 무언가를 먹거나 부채질을 하면서 키를 변화시킨다. 앨리스의 키를 변화시키는 것은 앨리스의 행동이다. 앨리스가 하는 행동에 따라 앨리스의 상태가 변하게 된다. 앨리스의 상태를 결정하는 것은 행동이지만, 행..

    1. 객체지향이란? | 객체지향의 사실과 오해 1장

    1. 객체지향이란? | 객체지향의 사실과 오해 1장

    객체지향의 목표는 실세계의 모방이 아니다. 하지만 실세계의 모방이라는 개념은 객체지향을 이해하는 데는 효과적이다. 역할, 책임, 협력 객체지향 패러다임의 핵심은 자율적인 객체들의 협력이다. 손님: 커피 주문하기 캐셔: 주문 받기 바리스타: 커피 제조하기 const customer = { order: () => { return casher.takeOrder("아메리카노"); }, }; const casher = { takeOrder: (coffee: string) => { return barista.makeCoffee(coffee); }, }; const barista = { makeCoffee: (coffee: string) => { return coffee; }, }; 커피를 주문하고 제조하는 과정은 ..