Description
유지관리가 편리한 객체지향 소프트웨어 만들기!
“『헤드 퍼스트 디자인 패턴(개정판)』 한 권이면 충분합니다!”
이유 1. 흥미로운 이야기와 재치 넘치는 구성이 담긴 〈헤드 퍼스트〉 시리즈!
하나의 패턴에 하나의 이야기를 담았습니다. 틀에 박히지 않아 지루할 틈이 없는 구성과 친구와 이야기하듯 편안한 대화체로 이야기를 풀어냅니다. 이야기 속에 다양한 방법으로 해결할 수 있는 질문과 90개 이상의 연습문제를 담았습니다. 마치 게임 퀘스트를 해결하듯 문제를 하나하나 해결하다 보면 학습한 내용이 머릿속에 강렬하게 남습니다.

이유 2. 원스톱으로 배우는 14가지 GoF 핵심 디자인 패턴과 9가지 객체지향 디자인 원칙!
현장에서 자주 사용되는 옵저버, 어댑터, MVC 패턴 등 14가지 GoF 객체지향 패턴을 중점으로 패턴의 정의, 사용 시기, 사용처, 사용 이유, 즉시 디자인에 적용하는 방법을 알려줍니다. 이와 더불어 객체지향 프로그래밍에 광범위하게 적용할 수 있는 OCP, 할리우드 원칙 등 9가지 객체지향 디자인 원칙과 패턴으로 생각하는 방법도 알려줍니다.

이유 3. 시대의 변화에 맞춘 개정과 한국 독자만을 위한 특별판!
자바 8과 자바 16 이상에서 무리 없이 동작할 수 있도록 예제 코드를 수정했으며, 부가적인 설명과 Q&A 질문을 추가했습니다. 또한 16여 년 만의 개정을 기념해 오직 한국 독자만을 위한 새로운 삽화를 사용하고 한글 친화적인 구성했습니다. 원서를 읽을 때보다 더욱 편안하게 디자인 패턴을 학습할 수 있습니다.

▶ 이 책을 읽어야 하는 당신!
● 소프트웨어 출시는 완벽 그 자체! “어?~ 코드 수정하려고 다시 보니까 난리…”
→ 유지보수만 생각하면 그저 눈물인 주니어 (자바) 개발자

● 코딩 실력은 장판파의 장비! “어?~ 팩토리 메소드 패턴을 이렇게 적용했던가?”
→ 디자인 패턴을 다시 한번 살펴보고 싶은 시니어 (자바) 개발자

● 혼자 공부해서 다진 프로그래밍 언어 실력! “어?~ 근데 패턴이 뭐야?”
→ 개발 현장의 소프트웨어 디자인 방법이 궁금한 개발자 지망생

저자

에릭프리먼,엘리자베스롭슨,케이시시에라,버트베이츠

저자:에릭프리먼
예일대학교컴퓨터공학박사학위를받고월트디즈니에서CTO로활동했다.오라일리미디어에서〈헤드퍼스트〉시리즈를총괄하며『헤드퍼스트디자인패턴』등다양한도서를집필했다.현재는개발자를대상으로온라인학습을제공하는WickedlySmart에서학습콘텐츠를제작하고있다.

저자:엘리자베스롭슨
예일대학교컴퓨터공학석사학위를받고다양한기술주제로개인별워크숍과온라인수업을제작했으며,사람들이기술을이해하는데도움이될만한학습경험을만드는일에몰두했다.오라일리미디어에서특수프로젝트책임자로활동했으며,현재는WickedlySmart의공동창업자로다양한학습콘텐츠를제작하고있다.

역자:서환수
서울대학교물리학과에서학사,박사학위를받았고지금은삼성종합기술원에서반도체분야를연구하고있다.한빛미디어에서『HeadFirstJava』,『ProgrammingChallenges:알고리즘트레이닝북』,『프로그래머로사는법』,『슬라이드올로지』를비롯해여러권을번역했다.

목차

이책에쏟아진찬사
독자가보내는찬사
<헤드퍼스트>시리즈에쏟아진찬사
지은이소개
<헤드퍼스트>시리즈만든이소개
옮긴이의말

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클라이언트코드고치기
__새로운모니터링기능테스트
__데모버전만들기
__데모버전

출판사 서평

▶이책을읽어야하는당신!

●소프트웨어출시는완벽그자체!“어?~코드수정하려고다시보니까난리…”
→유지보수만생각하면그저눈물인주니어(자바)개발자

●코딩실력은장판파의장비!“어?~팩토리메소드패턴을이렇게적용했던가?”
→디자인패턴을다시한번살펴보고싶은시니어(자바)개발자

●혼자공부해서다진프로그래밍언어실력!“어?~근데패턴이뭐야?”
→개발현장의소프트웨어디자인방법이궁금한개발자지망생

경력과세대를넘어오랫동안
객체지향개발자의성장을도와준
디자인패턴교과서의화려한귀환!

??2005년부터디자인패턴도서분야부동의1위
??디자인패턴의고전이자바이블

●디자인패턴은선배들의경험이담긴문제해결방법입니다
예로부터건물을지을때는사전설계가중요했습니다.어떤문제나수정사항이발생했을때,하나하나시행착오를겪으면서다시짓기에는시간과비용이많이들기때문입니다.사람들은같은실수를반복하지않기위해자신들의시행착오를바탕으로특정상황에서발생하는문제의패턴을발견하고해결방안을기록으로남겼습니다.이를‘디자인패턴’이라고부릅니다.

건축학에서시작된디자인패턴은코드로소프트웨어를구축한다는점에서소프트웨어설계에도동일하게적용할수있습니다.누군가‘가’겪은문제가누군가‘만’겪은문제는아니므로동일한문제를먼저경험한선배들의지식을활용한다면소프트웨어설계의효율을추구할수있습니다.

●디자인패턴은시간과노력을줄여줍니다
세상에완벽한소프트웨어는없습니다.시대에따라기술과사용자의요구가변하기때문입니다.프로그래밍을할때항상‘지금이소프트웨어를언젠가는고쳐야한다’라고생각해야합니다.사전에소프트웨어를고칠때코드에미치는영향을최소화할수있도록디자인한다면자질구레한코딩에서벗어나더좋은소프트웨어를만드는데더많은시간을투자할수있습니다.

디자인패턴의유용성은단지선배들의코드를‘재사용’하는것에그치지않습니다.팀을이끌며프로젝트를진행하고다양한형태로발생할수있는문제를해결하는데도적용할수있습니다.‘디자인패턴’에관한조예가깊다면적재적소에맞는해결책을효율적으로제시할수있으며,“자신에게귀를기울이고있는모든객체를추적할수있고,새로운데이터가들어올때마다각각의청취자한테메시지를보내주며,청취자는언제든지청취자목록에참가하거나탈퇴할수있는방송용클래스라는걸만들어서이문제를해결하자!”라고길게설명할필요없이“옵저버패턴을쓰자!"라는한문장으로효율적인의사소통을할수있습니다.

●디자인패턴은용도에맞게적절하게사용해야하는도구입니다
하지만디자인패턴이만병통치약은아닙니다.빈대를잡으려고초가삼간을다태우면안되는것처럼패턴을아무코드에나적용해서는안됩니다.같은프로그램에까지패턴을적용하면오히려코드가복잡해지고,남들이알아보기힘들어지고,유지보수가어려워져결국파국에이르기때문입니다.디자인패턴은좋은소프트웨어를만드는도구일뿐입니다.모든도구는용도에맞게적절하게사용할때그위력을발휘합니다.

사실어떤코드에디자인패턴을써야하는지배우려면많은시간과노력이필요합니다.디자인패턴을완전히이해해야만어떤코드가스파게티코드인지알수있기때문입니다.하지만디자인패턴의핵심요소만쏙뽑아서알려주고,재미있게설명해주는책이있다면어떨까요?적은시간과노력으로디자인패턴을배울수있어서행복하지않을까요?그런책을멀리서찾을필요는없습니다.『헤드퍼스트디자인패턴(개정판)』이바로여기있으니까요.

▶『헤드퍼스트디자인패턴(개정판)』에서다루는내용
『헤드퍼스트디자인패턴』은2005년출간후17년이라는시간동안디자인패턴분야에서부동의베스트셀러1위를지켜왔습니다.경력과세대를넘어많은개발자에게사랑받는이유는다음과같이‘GoF디자인패턴의핵심’만을다루는데있습니다.

??14가지GoF핵심패턴의사용시기와이유!
??즉시디자인에적용하는방법!
??쓰지말아야하는상황!
??패턴의근간이되는객체지향디자인원칙!
??그밖에알아두면좋은9가지패턴의정의와사용법!

▶『헤드퍼스트디자인패턴(개정판)』에서달라진점
??보편적으로사용하는자바8부터최신버전인자바16이상에서무리없이동작할수있게예제코드수정
??부가설명과Q&A질문추가
??한국독자만을위한새로운삽화와한글친화적인구성

*16여년만의개정을기념해초판보다편안하게디자인패턴을학습할수있도록새로운한국어판을만들었습니다.

▶<헤드퍼스트>시리즈의특징
그리고디자인패턴을지루하지않은방법으로배우는것도정말중요합니다.<헤드퍼스트>시리즈를한권이라도읽어보았다면이책이어떤책인지쉽게짐작할수있을겁니다.‘볼거리가많고,머릿속에쏙쏙들어오는방식’으로구성되어있어머리가먼저반응합니다.

??친구와이야기하는듯한편안한대화체!
??예상하기어려운재치넘치는구성!
??90개가넘는도전적인연습문제!
??여러관점에서생각해볼수있는흥미로운이야기!
??빠르게따라해볼수있는간단한예제코드!

이밖에패턴중독을피하는방법과디자인패턴을발견하는방법도다루고있어미래의패턴디자이너에게도도움이될것입니다.