
책소개
하나의 패턴에 하나의 이야기를 담았다. 틀에 박히지 않아 지루할 틈이 없는 구성과 친구와 이야기하듯 편안한 대화체로 이야기를 풀어낸다. 이야기 속에 다양한 방법으로 해결할 수 있는 질문과 90개 이상의 연습문제를 담았다. 마치 게임 퀘스트를 해결하듯 문제를 하나하나 해결하다 보면 학습한 내용이 머릿속에 강렬하게 남는다.
현장에서 자주 사용되는 옵저버, 어댑터, MVC 패턴 등 14가지 GoF 객체지향 패턴을 중점으로 패턴의 정의, 사용 시기, 사용처, 사용 이유, 즉시 디자인에 적용하는 방법을 알려준다. 이와 더불어 객체지향 프로그래밍에 광범위하게 적용할 수 있는 OCP, 할리우드 원칙 등 9가지 객체지향 디자인 원칙과 패턴으로 생각하는 방법도 알려준다.
자바 8과 자바 16 이상에서 무리 없이 동작할 수 있도록 예제 코드를 수정했으며, 부가적인 설명과 Q&A 질문을 추가했다. 또한 16여 년 만의 개정을 기념해 오직 한국 독자만을 위한 새로운 삽화를 사용하고 한글 친화적인 구성했다. 원서를 읽을 때보다 더욱 편안하게 디자인 패턴을 학습할 수 있다.
저자소개
출판사소개
목차
이 책에 쏟아진 찬사
독자가 보내는 찬사
<헤드 퍼스트> 시리즈에 쏟아진 찬사
지은이 소개
<헤드 퍼스트> 시리즈 만든이 소개
옮긴이의 말
00장 들어가며 | 이 책을 읽는 방법
__ 이 책의 독자
__ 이 책이 이렇게 된 이유
__ 이 책의 구성
__ 여러분의 두뇌를 정복하는 방법
__ 일러두기
__ 테크니컬 리뷰어
__ 감사의 글
01장 디자인 패턴 소개와 전략 패턴 | 디자인 패턴의 세계로 떠나기
__ 오리 시뮬레이션 게임, SimUduck
__ 오리 시뮬레이션 게임 차별화하기
__ 경고! 심각한 문제 발생
__ 상속을 생각하기
__ 인터페이스 설계하기
__ 해결 방법 고민하기
__ 소프트웨어 개발 불변의 진리
__ 문제를 명확하게 파악하기
__ 바뀌는 부분과 그렇지 않은 부분 분리하기
__ 오리의 행동을 디자인하는 방법
__ 오리의 행동을 구현하는 방법
__ 오리 행동 통합하기
__ 오리 코드 테스트
__ 동적으로 행동 지정하기
__ 캡슐화된 행동 살펴보기
__ 두 클래스를 합치는 방법
__ 첫 번째 디자인 패턴: 전략 패턴
__ 디자인 패턴 만나기
__ 패턴과 전문 용어
__ 디자인 패턴 사용법
__ 디자인 도구상자 안에 들어가야 할 도구들
__ 연습문제 정답
02장 옵저버 패턴 | 객체들에게 연락 돌리기
__ 기상 모니터링 애플리케이션 알아보기
__ WeatherData 클래스 살펴보기
__ 구현 목표
__ 기상 스테이션용 코드 추가하기
__ 원칙으로 추가 코드 살펴보기
__ 옵저버 패턴 이해하기
__ 옵저버 패턴의 작동 원리
__ 옵저버 패턴의 정의
__ 옵저버 패턴의 구조
__ 느슨한 결합의 위력
__ 기상 스테이션 설계하기
__ 기상 스테이션 구현하기
__ Subject 인터페이스 구현하기
__ 디스플레이 요소 구현하기
__ 기상 스테이션 테스트
__ 라이브러리 속 옵저버 패턴 알아보기
__ 인생을 바꿀 애플리케이션 만들기
__ 풀 방식으로 코드 바꾸기
__ 업데이트한 기상 스테이션 코드 테스트
__ 디자인 도구상자 안에 들어가야 할 도구들
__ 연습문제 정답
03장 데코레이터 패턴 | 객체 꾸미기
__ 초대형 커피 전문점, 스타버즈
__ OCP 살펴보기
__ 데코레이터 패턴 살펴보기
__ 주문 시스템에 데코레이터 패턴 적용하기
__ 데코레이터 패턴의 정의
__ Beverage 클래스 장식하기
__ 데코레이터 패턴 적용 연습
__ 커피 주문 시스템 코드 만들기
__ 음료 코드 구현하기
__ 첨가물 코드 구현하기
__ 커피 주문 시스템 코드 테스트
__ 데코레이터가 적용된 예: 자바 I/O
__ java.io 클래스와 데코레이터 패턴
__ 자바 I/O 데코레이터 만들기
__ 새로 만든 자바 I/O 데코레이터 테스트
__ 디자인 도구상자 안에 들어가야 할 도구들
__ 연습문제 정답
04장 팩토리 패턴 | 객체지향 빵 굽기
__ 최첨단 피자 코드 만들기
__ 피자 코드 추가하기
__ 객체 생성 부분 캡슐화하기
__ 객체 생성 팩토리 만들기
__ 클라이언트 코드 수정하기
__ ‘간단한 팩토리’의 정의
__ 다양한 팩토리 만들기
__ 피자 가게 프레임워크 만들기
__ 서브클래스가 결정하는 것 알아보기
__ 피자 스타일 서브클래스 만들기
__ 팩토리 메소드 선언하기
__ 피자 팩토리 메소드로 피자 주문하기
__ Pizza 클래스 만들기
__ 최첨단 피자 코드 테스트
__ 팩토리 메소드 패턴 살펴보기
__ 병렬 클래스 계층구조 알아보기
__ 팩토리 메소드 패턴의 정의
__ 객체 의존성 살펴보기
__ 의존성 뒤집기 원칙
__ 의존성 뒤집기 원칙 적용하기
__ 생각 뒤집기
__ 의존성 뒤집기 원칙을 지키는 방법
__ 원재료 종류 알아보기
__ 원재료군으로 묶기
__ 원재료 팩토리 만들기
__ 뉴욕 원재료 팩토리 만들기
__ Pizza 클래스 변경하기
__ 올바른 재료 공장 사용하기
__ 바뀐 내용 되돌아보기
__ 새로운 코드로 또 피자 주문하기
__ 추상 팩토리 패턴의 정의
__ 팩토리 메소드 패턴과 추상 팩토리 패턴
__ 디자인 도구상자 안에 들어가야 할 도구들
__ 연습문제 정답
05장 싱글턴 패턴 | 하나뿐인 특별한 객체 만들기
__ 리틀 싱글턴 알아보기
__ 고전적인 싱글턴 패턴 구현법
__ 초콜릿 보일러 코드 살펴보기
__ 싱글턴 패턴의 정의
__ 허쉬! 초콜릿 보일러에 문제 발생
__ 멀티스레딩 문제 살펴보기
__ 멀티스레딩 문제 해결하기
__ 더 효율적으로 멀티스레딩 문제 해결하기
__ 문제를 해결하는 적절한 방법 선택하기
__ 디자인 도구상자 안에 들어가야 할 도구들
__ 연습문제 정답
06장 커맨드 패턴 | 호출 캡슐화하기
__ 만능 IoT 리모컨
__ 협력 업체 클래스 살펴보기
__ 커맨드 패턴 소개
__ 음식 주문 과정 자세히 살펴보기
__ 객체마을 식당 등장인물의 역할
__ 객체마을 식당과 커맨드 패턴
__ 첫 번째 커맨드 객체 만들기
__ 커맨드 객체 사용하기
__ 커맨드 패턴의 정의
__ 커맨드 패턴 클래스 다이어그램 살펴보기
__ 슬롯에 명령 할당하기
__ 리모컨 코드 만들기
__ 커맨드 클래스 만들기
__ 리모컨 테스트
__ API 문서 만들기
__ 작업 취소 기능 추가하기
__ 작업 취소 기능 테스트
__ 작업 취소 기능을 구현할 때 상태를 사용하는 방법
__ 선풍기 명령어에 작업 취소 기능 추가하기
__ 선풍기 테스트 코드 만들기
__ 선풍기 코드 테스트
__ 여러 동작을 한 번에 처리하기
__ 매크로 커맨드 사용하기
__ 커맨드 패턴 활용하기
__ 커맨드 패턴 더 활용하기
__ 실전 적용! 커맨드 패턴
__ 디자인 도구상자 안에 들어가야 할 도구들
__ 연습문제 정답
07장 어댑터 패턴과 퍼사드 패턴 | 적응시키기
__ 어댑터 살펴보기
__ 객체지향 어댑터 알아보기
__ 어댑터 사용 방법 알아보기
__ 오리 어댑터 테스트
__ 어댑터 패턴 알아보기
__ 어댑터 패턴의 정의
__ 객체 어댑터와 클래스 어댑터
__ 실전 적용! 어댑터 패턴
__ Enumeration을 Iterator에 적응시키기
__ 퍼사드 패턴 맛보기
__ 홈시어터 만들기
__ 복잡한 방법으로 영화 보기
__ 퍼사드 작동 원리 알아보기
__ 홈시어터 퍼사드 만들기
__ 단순화된 인터페이스 만들기
__ 편한 방법으로 영화 보기
__ 퍼사드 패턴의 정의
__ 최소 지식 원칙
__ 친구를 만들지 않고 다른 객체에 영향력 행사하기
__ 절친에게만 메소드 호출하기
__ 퍼사드 패턴과 최소 지식 원칙
__ 디자인 도구상자 안에 들어가야 할 도구들
__ 연습문제 정답
08장 템플릿 메소드 패턴 | 알고리즘 캡슐화하기
__ 커피와 홍차 만들기
__ Coffee 클래스와 Tea 클래스 만들기
__ Coffee 클래스와 Tea 클래스 추상화하기
__ 추상화 방법 들여다보기
__ prepareRecipe( ) 메소드 추상화하기
__ 커피와 홍차를 만드는 과정 다시 살펴보기
__ 템플릿 메소드 패턴 알아보기
__ 템플릿 메소드 패턴의 장점 알아보기
__ 템플릿 메소드 패턴의 정의
__ 템플릿 메소드 속 후크 알아보기
__ 후크 활용하기
__ 후크 코드 테스트
__ 할리우드 원칙
__ 할리우드 원칙과 템플릿 메소드 패턴
__ 자바 API 속 템플릿 메소드 패턴 알아보기
__ 템플릿 메소드로 정렬하는 방법
__ 오리 정렬하기
__ 오리 대소 비교
__ 오리 정렬 코드 테스트
__ 템플릿 메소드로 그래픽 출력하기
__ AbstractList로 나만의 리스트 만들기
__ 디자인 도구상자 안에 들어가야 할 도구들
__ 연습문제 정답
09장 반복자 패턴과 컴포지트 패턴 | 컬렉션 잘 관리하기
__ 속보! 객체마을 식당과 팬케이크 하우스 합병
__ 메뉴 항목 살펴보기
__ 루와 멜의 메뉴 구현법 비교하기
__ 자격 요건 구현하기: 1차 시도
__ 반복을 캡슐화하기
__ 반복자 패턴 알아보기
__ 객체마을 식당 메뉴에 반복자 추가하기
__ 객체마을 식당 메뉴에서 반복자 사용하기
__ 종업원 코드에 반복자 적용하기
__ 종업원 코드 테스트
__ 반복자 패턴의 특징 알아보기
__ 통합 식당 코드 다시 살펴보기
__ 인터페이스 개선하기
__ java.util.Iterator 적용하기
__ 변경된 통합 식당 코드 살펴보기
__ 반복자 패턴의 정의
__ 반복자 패턴의 구조 알아보기
__ 단일 역할 원칙
__ Iterable 인터페이스 알아보기
__ 향상된 for 순환문 알아보기
__ 향상된 for 순환문 사용 시 주의사항
__ 객체마을 카페 메뉴 살펴보기
__ 객체마을 카페 메뉴 코드 고치기
__ 종업원 코드에 카페 메뉴 추가하기
__ 카페 메뉴까지 추가된 통합 식당 코드 테스트
__ 반복자와 컬렉션
__ 종업원 코드 개선하기
__ 리팩터링 준비하기
__ 컴포지트 패턴의 정의
__ 컴포지트 패턴으로 메뉴 디자인하기
__ 메뉴 구성 요소 구현하기
__ 메뉴 항목 구현하기
__ 메뉴 구현하기
__ 종업원 코드에 컴포지트 적용하기
__ 메뉴 코드 테스트
__ 메뉴 코드 테스트 결과
__ 디자인 도구상자 안에 들어가야 할 도구들
__ 연습문제 정답
10장 상태 패턴 | 객체의 상태 바꾸기
__ 최첨단 뽑기 기계
__ 상태 기계 기초 지식 알아보기
__ 뽑기 기계 코드 만들기
__ 뽑기 기계 코드 테스트
__ 알림! 뽑기 기계 코드 수정 요청
__ 요청 사항 살펴보기
__ 새로운 디자인 구상하기
__ State 인터페이스 및 클래스 정의하기
__ State 클래스 구현하기
__ 뽑기 기계 코드 수정하기
__ 뽑기 기계 전체 코드 살펴보기
__ 다른 상태 클래스 구현하기
__ 뽑기 기계 구조 다시 살펴보기
__ 상태 패턴의 정의
__ 보너스 알맹이 당첨 기능 추가하기
__ 데모 버전 돌려보기
__ 정상성 점검하기
__ 리필 기능 추가해보기
__ 디자인 도구상자 안에 들어가야 할 도구들
__ 연습문제 정답
11장 프록시 패턴 | 객체 접근 제어하기
__ 모니터링 코드 만들기
__ 모니터링 기능 테스트
__ 원격 프록시의 역할
__ 모니터링 코드에 원격 프록시 추가하기
__ 원격 메소드의 기초
__ 메소드 호출 과정 알아보기
__ 자바 RMI의 개요
__ 원격 서비스 만들기
__ 1단계: 원격 인터페이스 만들기
__ 2단계: 서비스 구현 클래스 만들기
__ 3단계: rmiregistry 실행하기
__ 4단계: 원격 서비스 실행하기
__ 서버에 필요한 코드 살펴보기
__ 클라이언트 코드 살펴보기
__ 뽑기 기계용 원격 프록시 고민하기
__ GumballMachine 클래스를 원격 서비스로 바꾸기
__ RMI 레지스트리 등록하기
__ GumballMonitor 클라이언트 코드 고치기
__ 새로운 모니터링 기능 테스트
__ 데모 버전 만들기
__ 데모 버전 돌려보기
__ 프록시 패턴의 정의
__ 원격 프록시와 가상 프록시 비교하기
__ 앨범 커버 뷰어 만들기
__ 앨범 커버 가상 프록시 설계하기
__ ImageProxy 코드 만들기
__ 앨범 커버 뷰어 테스트
__ 보호 프록시 만들기
__ 객체마을 데이팅 서비스
__ Person 인터페이스 코드 만들기
__ Person 인터페이스용 동적 프록시 만들기
__ 1단계: InvocationHandler 만들기
__ 2단계: 동적 프록시 생성 코드 만들기
__ 데이팅 서비스 코드 테스트
__ 데이팅 서비스 코드 테스트 결과
__ 실전! 프록시 동물원 탐방하기
__ 디자인 도구상자 안에 들어가야 할 도구들
__ 연습문제 정답
__ 준비된 코드: 앨범 커버 뷰어 코드
12장 복합 패턴 | 패턴을 모아 패턴 만들기
__ 패턴 섞어 쓰기
__ 오리 시뮬레이션 게임에 다양한 패턴 적용하기
__ 바뀐 내용 되돌아보기
__ 오리 시뮬레이션 게임 클래스 다이어그램 살펴보기
__ 복합 패턴의 왕 알현하기
__ 모델-뷰-컨트롤러 알아보기
__ 모델-뷰-컨트롤러 조금 더 알아보기
__ 모델-뷰-컨트롤러에 사용되는 패턴 알아보기
__ 모델-뷰-컨트롤러로 BPM 제어 도구 만들기
__ 모델, 뷰, 컨트롤러 합쳐서 보기
__ 모델, 뷰, 컨트롤러 만들기
__ 모델 만들기
__ 뷰 알아보기
__ 뷰 만들기
__ 컨트롤러 만들기
__ 컨트롤러 코드 살펴보기
__ 모델, 뷰, 컨트롤러 코드 합치기
__ MVC 속 전략 패턴 자세히 알아보기
__ 심박 모니터 모델 적응시키기
__ 심박 모니터 컨트롤러 만들기
__ 심박 모니터 코드 테스트
__ 디자인 도구상자 안에 들어가야 할 도구들
__ 연습문제 정답
__ 준비된 코드: BPM 제어 도구 코드
13장 실전 디자인 패턴 | 패턴과 행복하게 살아가기
__ 디자인 패턴의 정의
__ 디자인 패턴의 정의 자세히 살펴보기
__ 새로운 디자인 패턴 발견하기
__ 디자인 패턴 분류하기
__ 디자인 패턴 범주 알아보기
__ 패턴으로 생각하기
__ 패턴을 대하는 마음가짐
__ 전문 용어의 위력 되새기기
__ 4인방과 함께 하는 객체마을 여행
__ 패턴을 찾아 떠나기
__ 실전! 패턴 동물원 탐방하기
__ 사악한 안티 패턴 섬멸하기
__ 디자인 도구상자 안에 들어가야 할 도구들
__ 객체마을을 떠나며
__ 연습문제 정답
14장 기타 패턴 | 다양한 패턴 빠르게 알아보기
__ 브리지 패턴
__ 빌더 패턴
__ 책임 연쇄 패턴
__ 플라이웨이트 패턴
__ 인터프리터 패턴
__ 중재자 패턴
__ 메멘토 패턴
__ 프로토타입 패턴
__ 비지터 패턴
찾아보기
배송
- 배송비, 무료배송비는 업체 사정에 따라 달라질 수 있습니다.
- 배송은 결제 확인 후 다음날부터 2~3일 이내에 배송됩니다. (단 도서 산간지역은 1~2일정도 더 소요됩니다.)
- 공휴일은 배송기간에 포함되지 않습니다.
- 주문하신 상품이 여러개인 경우 동일한 업체의 상품만 묶음 배송 가능합니다. (업체 사정에 따라 달라질 수 있습니다.)
- 배송정보는 상단 주문조회나 마이페이지 주문목록에서 가능합니다.
상품 품절
- 공급사(출판사) 재고 사정에 의해 품절/지연될 수 있으며, 품절 시 관련 사항에 대해서는 이메일과 문자로 안내드립니다.
주문취소/변경
- 주문 상품에 대한 변경사항(품절,가격변동)이 발생하면 전화나 메일을 통해 변경내용을 알려드립니다.
- 주문 상품의 변경/취소/환불은 배송 시작전 마이페이지에서 직접 신청이 가능합니다.
- 주문 상품이 발송된 시점에서는 변경/취소/환불이 모두 불가능합니다.
반품/교환
- 기간 : 배송받으신 후 7일 이내에 가능합니다.
- 방법 : 홈페이지 마이페이지 > 반품/ 교환 신청 및 조회에서 가능합니다.
- 배송비 부담 : 상품에 이상이 있을시에는 무료, 고객의 단순변심 및 착오구매일 경우 상품 반송비용은 고객 부담입니다.
- 포장 개봉 후 재판매가 불가능한 상품은 반품/교환이 불가능합니다.
- 전자상거래 등에서의 소비자보호에 관한 법률이 정하는 소비자 청약철회 제한 내용에 해당되는 경우, 반품/교환이 불가능합니다.
반품/교환 불가 사유
- 소비자의 책임 있는 사유로 상품 등이 손실 또는 훼손된 경우 (단지 확인을 위한 포장 훼손은 제외)
- 소비자의 사용, 포장 개봉에 의해 상품 등의 가치가 현저히 감소한 경우
- 복제가 가능한 상품 등의 포장을 훼손한 경우
- 소비자의 요청에 따라 개별적으로 주문 제작되는 상품의 경우
- 디지털 컨텐츠인 eBook, 오디오북 등을 1회 이상 다운로드를 받았을 경우
- 시간의 경과에 의해 재판매가 곤란한 정도로 가치가 현저히 감소한 경우
- 전자상거래 등에서의 소비자보호에 관한 법률이 정하는 소비자 청약철회 제한 내용에 해당되는 경우
소비자 피해보상 환불 지연에 따른 배상
- 상품의 불량에 의한 반품, 교환, A/S, 환불, 품질보증 및 피해보상 등에 관한 사항은 소비자분쟁해결기준(공정거래위원회 고시)에 준하여 처리합니다.
- 대금 환불 및 환불 지연에 따른 배상금 지급 조건, 절차 등은 전자상거래 등에서의 소비자 보호에 관한 법률에 따라 처리합니다.