본문 바로가기

기술 서적

(25)
[오브젝트] ch5. 책임 할당하기 책임할당은 일종의 트레이드 오프 활동이다. 어떤 할당이 최선인지는 문맥과 상황에 따라 달라진다. 이번장에서 다룰 GRASP 패턴은 응집도, 결합도, 캡슐화 등의 기준에 따라 책임을 할당하고 결과를 트레이드 오프하는 기준을 배울 수 있게 도와줄 것이다. 1. 책임 주도 설계를 향해 책임 중심 설계의 2원칙 1. 데이터보다 행동을 우선하라 2. 협력이라는 문맥 안에서 책임을 결정하라 데이터보다 행동을 우선하라 - 데이터의 행동 = 객체의 책임이다 - 데이터란 책임을 수행하는데 필요한 재료일 뿐이다 - 먼저 책임을 떠올리고, 그 책임에 필요한 데이터를 생각하라 협력이라는 문맥 안에서 책임을 결정하라 - 책임의 품질 == 협력에 적합한 정도 - 메세지를 선택한 후, 그 메세지를 처리할 객체를 선택하라(메세지를 ..
[오브젝트] ch4. 설계 품질과 트레이드 오프 / 데이터 중심 설계의 문제점 객체지향 설계의 핵심은 협력, 역할, 책임이다. 협력 : 애플리케이션 기능 구현을 위해 메시지를 주고 받는 객체간의 상호작용 책임 : 객체가 다른 객체와 협력하기 위해 수행하는 행동 역할 : 대체 가능한 책임의 집합 객체 지향 설계란 : 올바른 객체에게 올바른 책임을 할당하면서 낮은 결합도와 높은 응집도를 가진 구조를 창조하는 활동 01. 데이터 중심의 영화 예매 시스템 : 자신이 포함하고 있는 데이터 조작에 필요한 오퍼레이션 정의 : 객체의 상태에 초점을 맞춤 : 객체를 독립된 데이터 덩어리로 바라봄 => 객체의 상태에 초점을 맞추면 일어나는 일 - 상태는 내부 구현에 속한다 => 불안정하다 - 인터페이스에 내부 상태가 스며든다 => 캡슐화가 깨진다 - 상태변경이 인터페이스 변경을 초래하여 변경이 전파..
[오브젝트] ch3. 역할, 책임, 협력 객체지향의 본질은 협력하는 객체들의 공동체를 만드는 것이다. 객체지향 설계의 핵심을 협력을 구성하기 위해 적절한 객체를 찾고 적절한 책임을 할당하는 과정에서 드러난다. 애플리케이션 기능에만 몰두하여, 협력,역할,책임을 고려하지 않은 채 구현에만 초점을 맞추는 것은 유연하지 못한 코드를 낳는 원인이 된다. 1. 협력 영화 예매 시스템 돌아보기 => 객체끼리 영화 예매라는 기능을 구현하기 위해 메시지를 주고받으며 상호작용한다 협력 애플리케이션 기능을 구현하기 위해 수행하는 상호작용 책임 객체가 협력에 참여하기 위해 수행하는 로직 역할 협력 안에서 수행하는 밀접한 책임의 집합 협력 - 메세지 전송 : 객체끼리 협력을 위해 사용하는 유일한 소통수단 - 메시지를 수신한 객체는 메서드를 실행해 요청에 응답 => 외..
[오브젝트] ch2. 객체지향 프로그래밍 1. 영화 예매 시스템 설명 - 영화와 상영의 의미 영화 : 제목, 상영시간, 가격정보처럼 영화가 가진 기본적인 정보 상영 : 상영일자, 시간, 순번 등 => 사용자가 실제로 예매하는 대상은 영화가 아니라 상영 - 할인 조건이란? 할인조건 순서 조건 상영 순번을 이용해 할인 여부 결정 ex) 조조 할인 -매번 첫번째 상영 기간 조건 - 영화 상영 시작시간을 이용해 할인여부 결정 - 요일, 시작시간, 종료시간 ex) 월요일 오전 10시 -오후 1시 기간 동안 할인 혜택 -할인 정책이란? 할인 정책 설명 금액 할인 일정 금액을 할인하는 정책 ex) 800원 할인 비율 할인 일정 비율을 할인하는 정책 ex) 10% 할인 2. 객체지향 프로그래밍을 향해 1) 어떤 클래스가 필요한지 고민하기 전에 어떤 객체가 필..
[오브젝트] ch1. 객체, 설계 토마스 쿤이 제안한 패러다임이 과학혁명의 구조를 바라보는 시각을 바꾸었듯이 프로그래밍에도 프로그래밍 패러다임이 있다. 프로그래밍 패러다임은 다음을 의미한다. - 우리가 해결할 문제를 바라보는 방식 - 프로그램을 작성하는 방법 => 개발자 공동체가 공유하는 프로그래밍 스타일과 모델 - 프로그래밍 패러다임은 과거의 시각을 폐기하기보다 단점을 보완하는 발전적 행보를 걸어왔다. 1) 티켓 판매 애플리케이션 구현하기 - 티켓 판매 애플리케이션을 구현한다 - 소극장은 관객을 입장시킬 수 있다 - 티켓이 있어야만 입장이 가능하다 - 무료 이벤트 초대장에 당첨된 관객은 티켓 교환 후, 입장이 가능하다 초기 설계 다이어그램 소극장 클래스의 코드 package org.eternity.theater.step01; publi..
[스터디] 이펙티브 자바 - item4. 인스턴스화를 막으려거든 private 생성자를 사용하라 보호되어 있는 글입니다.
[좋은 코드, 나쁜 코드] ch1-ch2 ch1 - 코드 품질 코드 작성의 4가지 상위 목표 1. 작동해야 한다. 2. 작동이 멈추면 안된다 3. 변화하는 요구사항에 적응해야 한다 4. 이미 존재하는 기능을 또다시 구현해서는 안된다 코드 품질의 6가지 핵심요소 1. 코드는 읽기 쉬워야 한다. 2. 코드는 예측가능해야 한다. 3. 코드를 오용하기 어렵게 만들라. 4. 코드를 모듈화하라. 5. 코드를 재사용 가능하고 일반화할 수 있게 작성하라 6. 테스트가 용이한 코드를 작성하고 제대로 테스트하라' 서두르지 않으면 더 빠르다 - 고품질 코드는 단기적으로 일정을 지연시키나 중장기적으로는 개발 시간이 단축된다 ch2 - 추상화 계층 - 문제가 매우 복잡해도 하위 문제를 식별하고 올바른 추상화 계층을 만든다면 그 복잡한 문제를 쉽게 다룰 수 있다 - 가..
[객체지향의 사실과 오해] ch5. 책임과 메시지 우리가 학교에서 CPR 교육을 받을 때, 신고를 부탁하는 사람을 정확히 "지정"하라고 교육한다. 그 이유는 단순히 신고를 해달라는 부탁을 한다면, "누군가 신고하겠지"라는 마음으로 책임감이 분산되어 초기 대응이 불가하기 때문이다. 그렇기에 정확한 한 사람을 지정하여 그 사람에게 신고에 대한 책임을 부여하는 것을 장려한다. 객체의 세계도 마찬가지다. 훌륭한 객체지향의 세계는 명확하게 정의된 역할과 책임을 지닌 객체들이 상호 협력하는 세계이다. 자율적인 책임 >설계의 품질을 좌우하는 책임 책임 : 요청을 처리하기 위해 객체가 수행하는 행동 자율적인 객체 : 자신이 맡은 책임을 스스로의 판단에 따라 수행 ex) 앨리스의 일화 : 증언에 대한 what과 how의 요구 두가지 같은 요청이 있다. 1) 증언하라 2..