Book

    7. 코드로 이해하는 메시지와 인터페이스 | 오브젝트 6장

    7. 코드로 이해하는 메시지와 인터페이스 | 오브젝트 6장

    훌륭한 객체지향을 위해서는 클래스가 아닌 객체를 지향해야 한다. 협력 안에서 객체가 수행하는 책임에 추점을 맞춰야 한다. 책임은 객체가 수신할 수 있는 메시지의 기반이 된다. 객체지향 애플리케이션의 가장 중요한 재료는 객체들이 주고받는 메시지다. 매시지들이 객체의 퍼블리 인터페이스를 구성한다. 1. 협력과 메시지 클라이언트-서버 모델 클라이언트: 메시지를 전송하는 객체 Screening은 '가격을 계산하라' 메시지를 전송함으로써 도움 요청 Movie는 '할인 요금을 계산하라' 메시지를 전송함으로써 도움 요청 서버: 메시질르 수신하는 객체 Movie는 가격을 계산하는 서비스를 제공함으로써 메시지에 응답 DiscountPolicy는 할인 요금을 계산하는 서비스를 제공함으로써 메시지에 응답 협력: 클라이언트가..

    6. 코드로 이해하는 객체의 책임 할당, GRASP 패턴 | 오브젝트 5장

    6. 코드로 이해하는 객체의 책임 할당, GRASP 패턴 | 오브젝트 5장

    어떤 객체에게 어떤 책임을 할당할지를 결정하는 것은 쉽지 않다. 책임 할당 과정은 일종의 트레이드오프이며, 올바른 책임을 할당하기 위해서는 다양한 관점에서 설계를 평가할 수 있어야 한다. 이번에 살펴볼 GRASP 패턴은 책임 할당의 어려움을 해결해준다. 1. 책임 주도 설계를 향해 데이터보다 행동을 먼저 결정하라 데이터는 책임을 수행하는 데 필요한 재료를 제공할 뿐이다. 객체의 데이터에서 행동으로 무게 중심을 옮겨야 한다. 데이터 중심 설계 이 객체가 포함해야 하는 데이터가 무엇인가 => 데이터를 처리하는 데 필요한 오퍼레이션은 무엇인가 책임 중심 설계 이 객체가 수행해야 하는 책임은 무엇인가 => 이 책임을 수행하는 데 필요한 데이터는 무엇인가 협력이라는 문맥 안해서 책임을 결정하라 책임의 품질은 협력..

    5. 코드로 이해하는 설계 품질(2/2) | 오브젝트 4장

    5. 코드로 이해하는 설계 품질(2/2) | 오브젝트 4장

    4. 자율적인 객체를 향해 캡슐화를 지켜라 캡슐화는 설계의 제1원리다. private으로 설정했다고 해도 접근자와 수정자를 통해 속성을 외부로 제공하고 있다면 캡슐화를 위반하는 것이다. Rectangle 클래스를 보자. class Rectangle { private left: number; private top: number; private right: number; private bottom: number; constructor(left: number, top: number, right: number, bottom: number) { this.left = left; this.top = top; this.right = right; this.bottom = bottom; } public getLeft():..

    4. 코드로 이해하는 설계 품질(1/2) | 오브젝트 4장

    4. 코드로 이해하는 설계 품질(1/2) | 오브젝트 4장

    객체지향 설계란 올바른 객체에게 올바른 책임을 할당하면서 낮은 결합도와 높은 응집도를 가진 구조를 만드는 것이다. 관점1: 객체지향 설계의 핵심은 책임 관점2: 책임을 할당하는 작업은 응집도/결합도 같은 설계 품질과 깊이 연관돼 있음 1. 데이터 중심의 영화 예매 시스템 데이터 중심 관점: 객체의 상태에 초점을 맞춤. 객체를 독립된 데이터 덩어리로 바라봄. 객체의 상태는 구현에 속한다. 구현은 불안정하기 때문에 변하기 쉽다. 캡슐화가 약해지며 변경에 취약하다. 책임 중심 관점: 객체의 행동에 초점을 맞춤. 객체를 협력하는 공동체의 일원으로 바라봄. 객체의 책임은 인터페이스에 속한다. 변경에 안정적이다. 데이터 중심으로 영화 예매 시스템을 구현해보자. Movie에 저장될 데이터부터 결정해보자. class ..

    3. 객체지향 패러다임의 핵심, 역할 책임 협력 | 오브젝트 3장

    3. 객체지향 패러다임의 핵심, 역할 책임 협력 | 오브젝트 3장

    객체지향 패러다임의 핵심은 역할, 책임, 협력이다. 클래스, 상속, 지연 바인딩은 구현 매커니즘일 뿐이다. 객체지향의 본질은 협력하는 객체들의 공동체를 창조하는 것이다. 1. 협력 객체지향 원칙을 따르는 애플리케이션의 제어 흐름은 다양한 객체들 사이에 균형 있게 분배된다. 다양한 객체들이 영화 예매라는 기능을 구현하기 위해 메시지를 주고받으면서 상호작용한다. 협력: 객체들이 기능을 구현하기 위해 수행하는 상호작용 책임: 객체가 협력에 참여하기 위해 수행하는 로직 역할: 객체가 협력 안에서 수행하는 책임들 메시지 전송은 협력을 위해 사용할 수 있는 유일한 커뮤니케이션 수단이다. 메시지를 수신한 객체는 메서드를 실행해 요청에 응답한다. 객체는 메시지를 처리할 방법을 스스로 선택한다. Screening은 Mo..

    2. 코드로 이해하는 객체지향 프로그래밍 | 오브젝트 2장

    2. 코드로 이해하는 객체지향 프로그래밍 | 오브젝트 2장

    이번 장은 뒤에서 다룰 다양한 주제들을 얕게 살펴보는 장이다. 온라인 영화 예매 시스템 예제를 다뤄보자. 1. 영화 예매 시스템 요구사항 영화 (movie) : 영화가 가지고 있는 기본적인 정보 상영 (screening) : 관객들이 영화를 관람하는 사건 할인 조건 (discount condition) : 할인 여부를 결정 순서 조건: 상영 순번을 이용해 할인 여부를 결정 (ex. 매일 10번째로 상영되는 영화에 대해 할인) 기간 조건: 상영 시작 시간을 이용해 할인 여부 결정 (ex. 매주 월요일 오전 10시부터 오후 1시 사이에 상용되는 영화에 대해 할인) 할인 정책 (discount policy) : 할인 요금을 결정 금액 할인 정책: 일정 금액을 할인 비율 할인 정책: 일정 비율의 요금을 할인 영..

    1. 코드로 이해하는 객체와 설계 | 오브젝트 1장

    1. 코드로 이해하는 객체와 설계 | 오브젝트 1장

    프로그래밍 패러다임은 특정 시대의 어느 성숙한 개발자 공동체에 의해 수용된 프로그래밍 방법과 문제 해결 방법, 프로그래밍 스타일이다. 이 책은 객체지향 패러다임에 관한 책이다. 이 책의 패러다임 전환이란 절차형 패러다임에서 객체지향 패러다임으로의 변화이다. C: 절차형 패러다임 Java: 객체지향 패러다임 LISP: 함수형 패러다임 PROLOG: 논리형 패러다임 각 패러다임과 패러다임을 채용하는 언어는 특정한 종류의 문제를 해결하는 데 필요한 일련의 개념들을 지원한다. 프로그래밍 패러다임에서는 두 패러다임이 공존할 수 있다. 이러한 언어를 다중패러다임 언어라 한다. C++: 절차형 패러다임 + 객체지향 패러다임 Scala: 함수형 패러다임 + 객체지향 패러다임 프로그래밍 패러다임은 혁명적이 아니라 발전적..

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

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

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