PRO OBJECTIVE-C DESIGN PATTERNS FOR IOS by Carlo Chung Original English language edition published by Apress, Inc. Copyright c 2011 by Apress. Korean

Similar documents
°æÁ¦Àü¸Á-µ¼º¸.PDF

<BFDCB1B9C0CE20C5F5C0DAB1E2BEF7C0C720B3EBBBE7B0FCB0E82E687770>

09 강제근로의 금지 폭행의 금지 공민권 행사의 보장 중간착취의 금지 41 - 대판 , 2006도7660 [근로기준법위반] (쌍용자동차 취업알선 사례) 11 균등대우의 원칙 43 - 대판 , 2002도3883 [남녀고용평등법위

untitled

iOS ÇÁ·Î±×·¡¹Ö 1205.PDF

<3036C7E2BCF6C3D6C1BEBABB2E687770>


CONTENTS.HWP

INDUS-8.HWP


C++ Programming

세계 비지니스 정보

우루과이 내지-1


제 출 문 중소기업청장 귀하 본 보고서를 중소기업 원부자재 구매패턴 조사를 통한 구매방식 개선 방안 연구 의 최종보고서로 제출합니다 한국산업기술대학교 산학협력단 단 장 최 정 훈 연구책임자 : 이재광 (한국산업기술대학교 부교수) 공동연구자 : 노성호

본책- 부속물

Microsoft PowerPoint - 11_DesignPatterns(2010).ppt [호환 모드]

법학박사학위논문 실손의료보험연구 2018 년 8 월 서울대학교대학원 법과대학보험법전공 박성민

13Åë°è¹é¼Ł

사물인터넷비즈니스빅뱅_내지_11차_ indd

<C1A4C3A5BFACB1B D3420C1A4BDC5C1FAC8AFC0DAC0C720C6EDB0DFC7D8BCD220B9D720C0CEBDC4B0B3BCB1C0BB20C0A7C7D120B4EBBBF3BAB020C0CEB1C720B1B3C0B020C7C1B7CEB1D7B7A520B0B3B9DF20BAB8B0EDBCAD28C7A5C1F6C0AF292E687770>

Inclusion Polymorphism과 UML 클래스 다이어그램 구조에 의거한 디자인패턴 해석

< BACFC7D1B1B3C0B0C1A4C3A5B5BFC7E228B1E2BCFABAB8B0ED D D20C6EDC1FD2035B1B32E687770>

<5BC6EDC1FD5DBEEEBEF7C0CCC1D6B3EBB5BFC0DAC0CEB1C7BBF3C8B2BDC7C5C2C1B6BBE7C3D6C1BEBAB8B0EDBCAD28BAB8C0CCBDBABEC6C0CC292E687770>

À̶õ°³È²³»Áö.PDF

00-1표지

*BA_00


C O N T E N T S 목 차 요약 / 1 I. 중남미화장품시장현황 / 3 Ⅱ. 주요국별시장정보 / 9 ( 트렌드 유통망 인증 ) 1. 브라질 / 9 2. 멕시코 / 콜롬비아 / 칠레 / 64 Ⅲ. 우리기업진출전략 / 79 # 첨부. 화장품관

언리얼엔진4_내지_ indd

C++ Programming

2005 중소기업 컨설팅 산업 백서

97_00

(Microsoft PowerPoint - 11_DesignPatterns\(2008\).ppt [\310\243\310\257 \270\360\265\345])

<BAD2B9FDBAB9C1A620BAB8B0EDBCAD5FC5EBC7D55F FB9DFB0A3BBE7C6F7C7D45F33C2F720B1B3C1A428B1D7B8B22020C3DFC3E2292E687770>

경제통상 내지.PS

°æÁ¦Åë»ó³»Áö.PDF

표1

유니 앞부속

<5B33B9F8B0FAC1A65D20B9E6BCDBBDC9C0C7BDC3BDBAC5DB20B0B3BCB1B9E6BEC8BFACB1B82DC3D6C3D6C1BE2E687770>

연구요약 1. 서론 연구의 목적 본 연구는 청소년 교육정책의 바람직한 방향을 설정하고, 미래지향적인 정책과제와 전략, 그리고 비전을 도출하기 위해 수행되었다. 이를 위해 지 난 15년간의 청소년 교육 환경 및 정책의 변화를 분석하고, 향후 15년간 의 청소년 교육 환경


영암군 관광종합개발계획 제6장 관광(단)지 개발계획 제7장 관광브랜드 강화사업 1. 월출산 기( 氣 )체험촌 조성사업 167 (바둑테마파크 기본 계획 변경) 2. 성기동 관광지 명소화 사업 마한문화공원 명소화 사업 기찬랜드 명소화 사업 240

israel-내지-1-4


改正稅法 企劃財政部

[96_RE11]LMOs(......).HWP

직업편-1(16일)

< B3E22032BAD0B1E220C4DCC5D9C3F7BBEABEF7B5BFC7E2BAD0BCAEBAB8B0EDBCAD28C3D6C1BE292E687770>

정책연구개발사업 2010-위탁 대학 등록금의 합리적 책정을 위한 실행방안 연구 연 구 책 임 자 공 동 연 구 자 송동섭(단국대학교) 이동규(충남대학교) 이창세(재능대학) 한창근(인하공업전문대학) 연 구 협 력 관 장미란(교육과학기술부) 교육과학기술부 이 연구는 201


그린홈이용실태및만족도조사

<BEC6BFF4BCD2BDCCBAB8B0EDBCAD28C3D6C1BE E687770>



<BBE7B8B3B4EBC7D0B0A8BBE7B9E9BCAD28C1F8C2A5C3D6C1BE E687770>

C O N T E N T 목 차 요약 / 4 Ⅰ. 서론 Ⅱ. 주요국별대형유통망현황 / Ⅲ. 시사점및진출방안 ( 첨부 ) 국가별주요수입업체

Àç°¡ »êÀçÀå¾ÖÀÎÀÇ ÀçÈ°ÇÁ·Î±×·¥¿¡ °üÇÑ¿¬±¸.HWP


저작자표시 - 비영리 2.0 대한민국 이용자는아래의조건을따르는경우에한하여자유롭게 이저작물을복제, 배포, 전송, 전시, 공연및방송할수있습니다. 이차적저작물을작성할수있습니다. 다음과같은조건을따라야합니다 : 저작자표시. 귀하는원저작자를표시하여야합니다. 비영리. 귀하는이저작물

JVM 메모리구조

저작자표시 - 비영리 - 변경금지 2.0 대한민국 이용자는아래의조건을따르는경우에한하여자유롭게 이저작물을복제, 배포, 전송, 전시, 공연및방송할수있습니다. 다음과같은조건을따라야합니다 : 저작자표시. 귀하는원저작자를표시하여야합니다. 비영리. 귀하는이저작물을영리목적으로이용할

99-18.hwp

통신1310_01-도비라및목차1~9

*통신1802_01-도비라및목차1~11

User's Guide

<5BB1E2BABB5D5FB0F8B0F8BACEB9AE5FBDC3B0A3C1A6B1D9B9ABBFCD5FC0B0BEC6C8DEC1F7BFA15FB5FBB8A55FB4EBC3BCC0CEB7C25FC8B0BFEBB0FAC0C75FBFACB0E8B9E6BEC85F2D5FB9AEB9CCB0E62E687770>


미얀-내지-8차

MVVM 패턴의 이해


PDF

행정학석사학위논문 공공기관기관장의전문성이 조직의성과에미치는영향 년 월 서울대학교행정대학원 행정학과행정학전공 유진아

<4D F736F F D20B4EBBFF BFB5BEF7BAB8B0EDBCAD2E646F63>


0

< B3E220C7CFB9DDB1E2BACEC5CD20C0CCB7B8B0D420B4DEB6F3C1FDB4CFB4D E687770>

Microsoft Word - 문필주.doc

<4D F736F F F696E74202D203137C0E55FBFACBDC0B9AEC1A6BCD6B7E7BCC72E707074>

태평양도서국 개황.PS

<4D F736F F D20C0CCBEBEC1A6BEEE5FC3A5BCD2B0B35F >

워드프레스(김대중)_내지_최종.indd

wtu05_ÃÖÁ¾

2001 년 4 월전력산업구조개편과함께출범한전력거래소는전력산업의중심 기관으로서전력시장및전력계통운영, 전력수급기본계획수립지원의기능을 원활히수행하고있습니다. 전력거래소는전력자유화와함께도입된발전경쟁시장 (CBP) 을지속 적인제도개선을통해안정적으로운영하고있으며, 계통운영및수급

장애인통계-0110-최종.hwp

장애인건강관리사업

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

<BCADBFEFBDC3BFA9BCBAB0A1C1B7C0E7B4DC5FBCADBFEFBDC320B0F8B5BFC0B0BEC6C1F6BFF8BBE7BEF7C0C720C1F6BCD3B0A1B4C9BCBA20B9E6BEC8BFACB1B828BCF6C1A E687770>

Microsoft PowerPoint - MonthlyInsighT-2018_9월%20v1[1]

< B9AEC8ADBFB9BCFA20C6AEB7BBB5E520BAD0BCAE20B9D720C0FCB8C128B1E8C7FDC0CE292E687770>

목 차 I. 외부감사인의 감사보고서 II. 연결재무제표 연결재무상태표 연결포괄손

저작자표시 - 비영리 - 변경금지 2.0 대한민국 이용자는아래의조건을따르는경우에한하여자유롭게 이저작물을복제, 배포, 전송, 전시, 공연및방송할수있습니다. 다음과같은조건을따라야합니다 : 저작자표시. 귀하는원저작자를표시하여야합니다. 비영리. 귀하는이저작물을영리목적으로이용할

4.기획특집5-최종

<28BCF6BDC D B0E6B1E2B5B520C1F6BFAABAB020BFA9BCBAC0CFC0DAB8AE20C1A4C3A520C3DFC1F8C0FCB7AB5FC3D6C1BE E E687770>

JAVA PROGRAMMING 실습 08.다형성

PowerPoint 프레젠테이션

행정학박사학위논문 목표모호성과조직행태 - 조직몰입, 직무만족, 공직봉사동기에미치는 영향을중심으로 - 년 월 서울대학교대학원 행정학과행정학전공 송성화

*통신1604_01-도비라및목차1~12

문학석사학위논문 존밀링턴싱과이효석의 세계주의비교 로컬 을중심으로 년 월 서울대학교대학원 협동과정비교문학 이유경

C O N T E N T S 목 차 요약 Ⅰ. 동유럽의료기기시장개요 동유럽의료기기시장현황 2. 관련 EU 정책및지침 3. 시장전망 Ⅱ. 국가별의료기기시장동향 폴란드 2. 체코 3. 헝가리 4. 크로아티아 Ⅲ. 국가별유망품

Transcription:

PRO OBJECTIVE-C DESIGN PATTERNS FOR IOS by Carlo Chung Original English language edition published by Apress, Inc. Copyright c 2011 by Apress. Korean edition copyright c 2012 by J-PUB. All rights reserved. 이책의한국어판저작권은대니홍에이전시를통한저작권사와의독점계약으로제이펍출판사에있습니다. 신저작권법에의해한국내에서보호를받는저작물이므로무단전재와무단복제를금합니다. 초판 1쇄발행 2012년 5월 4일지은이카를로청옮긴이심재철 펴낸이장성두 책임편집안주연본문디자인디자인콤마 표지디자인미디어픽스주소경기도파주시교하읍파주신도시에이15-1블록한빛마을휴먼빌 201-502 전화 070-8201-9010 팩스 02-6280-0405 홈페이지 www.jpub.kr 펴낸곳제이펍출판신고 2009년 11월 10일제406-2009-000087호용지신승지류유통 인쇄해외정판사 제본동호문화 ISBN 978-89-94506-43-2 (13560) 값 30,000 원 이책은저작권법에따라보호를받는저작물이므로무단전재와무단복제를금지하며, 이책내용의전부또는일부를이 용하려면반드시저작권자와제이펍의서면동의를받아야합니다. 잘못된책은구입하신서점에서바꾸어드립니다. 제이펍은독자여러분의책에관한아이디어와원고투고를기다리고있습니다. 책으로펴내고자하는아이디어나 원고가있으신분께서는책에대한간단한개요와차례, 구성과저 ( 역 ) 자약력등을메일로보내주세요. ( 보내실곳 : jeipub@gmail.com)

차례 옮긴이머리말 xiii 머리말 xv 지은이소개 xvii 기술검토자소개 xviii 감사의글 xix PART I 시작하기 1 CHAPTER 1 :: 헬로우, 디자인패턴! 3 이책의목적 4 시작에필요한것들 4 시작에앞서알필요가있는것 5 설계데자뷰 6 디자인패턴의근원-모델, 뷰, 컨트롤러 (MVC) 8 데이터와그것의처리를모델객체에캡슐화하기 8 뷰객체를사용해서사용자와인터페이스하기 9 컨트롤러객체로모델과뷰연결하기 9 복합디자인패턴인 MVC 10 시스템설계에영향을줄수있는사안들 12 외부인터페이스를사용하도록프로그래밍하자 12 프로토콜 (@protocol) vs. 추상베이스클래스 (ABC) 13 객체합성 vs. 클래스상속 15 이책에사용된객체와클래스표기 17 클래스다이어그램 18 객체다이어그램 22 디자인패턴의구성 23 요약 23 CHAPTER 2 :: 사례연구 : 아이폰앱설계 25 아이디어의개념화 26 룩앤필설계 28 아키텍처설계 31 뷰관리 32 그린것을나타내기 35 저장된그림의데이터화 42 사용자의앱운용 48 사용했던디자인패턴들 56 요약 57 iv

차 례 PART II 객체생성 59 CHAPTER 3 :: 프로토타입 61 프로토타입패턴이란? 62 프로토타입패턴은언제사용하면좋을까? 63 얕은복사 vs. 깊은복사 64 코코아터치프레임워크의객체복사사용하기 66 Mark 복합객체의복사메서드구현하기 67 복제된 Mark 객체를패턴템플릿으로사용하기 79 요약 82 CHAPTER 4 :: 팩토리메서드 83 팩토리메서드패턴이란? 84 팩토리메서드는언제사용하면좋을까? 85 팩토리메서드가안전한객체생성방법인이유는? 86 TouchPainter 앱의서로다른캔버스생성하기 86 원하는타입의 CanvasView 객체사용하기 93 코코아터치프레임워크의팩토리메서드사용 96 요약 97 CHAPTER 5 :: 추상팩토리 99 TouchPainter 앱에추상팩토리적용하기 102 코코아터치프레임워크의추상팩토리사용 110 요약 114 CHAPTER 6 :: 빌더 115 빌더패턴이란? 116 빌더패턴은언제사용하면좋을까? 118 v

프로오브젝티브 -C 디자인패턴 추적게임의캐릭터만들기 119 요약 131 CHAPTER 7 :: 싱글톤 133 싱글톤패턴이란? 134 싱글톤패턴은언제사용하면좋을까? 135 Objective-C로싱글톤구현하기 136 싱글톤의서브클래스만들기 142 스레드에서의안전 143 코코아터치프레임워크의싱글톤사용 143 UIApplication 클래스사용 144 UIAccelerometer 클래스사용 144 NSFileManager 클래스사용 145 요약 145 PART III 인터페이스맞추기 147 CHAPTER 8 :: 어댑터 149 어댑터패턴이란? 150 어댑터패턴을언제사용하면좋을까? 153 위임이해하기 154 Objective-C 프로토콜로어댑터패턴구현하기 155 스트로크색상변경메커니즘의설계와구현 156 ios 4 또는 5의 Objective-C 블록을사용해서어댑터패턴구현하기 164 블록참조의선언 164 블록의생성 165 블록을어댑터로사용하기 167 요약 172 vi

차 례 CHAPTER 9 :: 브리지 173 브리지패턴이란? 174 브리지패턴은언제사용하면좋을까? 175 ios의가상에뮬레이터만들기 176 요약 185 CHAPTER 10 :: 퍼사드 187 퍼사드패턴이란? 188 퍼사드패턴은언제사용하면좋을까? 189 서브시스템의여러인터페이스들에대해단순화된인터페이스제공하기 189 TouchPainter 앱에퍼사드패턴사용하기 193 요약 196 PART IV 객체의분리 199 CHAPTER 11 :: 미디에이터 201 미디에이터패턴이란? 202 미디에이터패턴은언제사용하면좋을까? 204 TouchPainter 앱의뷰전환관리하기 204 뷰전환로직변경시의문제점 208 UI 트래픽의처리흐름을집중화하기 210 인터페이스빌더에서 CoordinatingController 사용하기 217 요약 221 CHAPTER 12 :: 옵저버 223 옵저버패턴이란? 224 vii

프로오브젝티브 -C 디자인패턴 옵저버패턴은언제사용하면좋을까? 226 모델-뷰-컨트롤러에옵저버패턴사용하기 226 코코아터치프레임워크에서옵저버패턴사용하기 227 통보 (Notification) 227 키-값관찰 (key-value observing) 229 CanvasView의스트로크변경하기 230 요약 245 PART V 추상컬렉션 247 CHAPTER 13 :: 컴포지트 249 컴포지트패턴이란? 250 컴포지트패턴은언제사용하면좋을까? 253 TouchPainter 앱의 Mark 사용법이해하기 253 코코아터치프레임워크의복합구조사용 267 요약 269 CHAPTER 14 :: 이터레이터 271 이터레이터패턴이란? 272 이터레이터패턴은언제사용하면좋을까? 275 코코아터치프레임워크의이터레이터사용하기 275 NSEnumerator 276 블록기반열거 277 빠른열거처리 279 내부열거 280 그림의꼭짓점을순환처리하기 280 그림의꼭짓점을순환처리하기 ( 내부적으로 ) 290 요약 293 viii

차 례 PART VI 객체의행동확장 295 CHAPTER 15 :: 비지터 297 비지터패턴이란? 298 비지터패턴을언제사용하면좋을까? 301 비지터를사용해서 TouchPainter의 Mark 그리기 301 그밖에비지터가할수있는일은? 312 비지터대신카테고리를사용할수없을까? 312 요약 313 CHAPTER 16 :: 데코레이터 315 데코레이터패턴이란? 316 데코레이터패턴은언제사용하면좋을까? 317 객체의 껍데기 ( 외부적 ) 변경 vs. 알맹이 ( 내부적 ) 변경 318 UIImage의이미지필터만들기 319 서브클래스로데코레이터구현하기 320 카테고리를사용해서데코레이터구현하기 334 요약 343 CHAPTER 17 :: 책임연쇄 345 책임연쇄패턴이란? 346 책임연쇄패턴은언제사용하면좋을까? 348 RPG 게임에서책임연쇄사용하기 348 요약 357 ix

프로오브젝티브 -C 디자인패턴 PART VII 알고리즘의캡슐화 359 CHAPTER 18 :: 템플릿메서드 361 템플릿메서드패턴이란? 362 템플릿메서드는언제사용하면좋을까? 363 샌드위치를만들기위해템플릿메서드사용하기 364 템플릿메서드가반드시동작하게만들기 374 템플릿메서드에추가단계넣기 377 코코아터치프레임워크의템플릿메서드사용 381 UIView 클래스의커스텀드로잉 381 코코아터치의또다른템플릿메서드구현 382 요약 383 CHAPTER 19 :: 스트래티지 385 스트래티지패턴이란? 386 스트래티지패턴은언제사용하면좋을까? 387 UITextField에데이터검사스트래티지적용하기 387 요약 399 CHAPTER 20 :: 커맨드 401 커맨드패턴이란? 402 커맨드패턴은언제사용하면좋을까? 403 코코아터치프레임워크의커맨드패턴사용 404 NSInvocation 객체 404 NSUndoManager 405 TouchPainter의 Undo/Redo 구현하기 407 NSUndoManager를사용해서그리기 / 그리기취소구현하기 407 우리나름의그리기 / 그리기취소기반구조만들기 414 x

차 례 사용자가 Undo/Redo 할수있게만들기 426 그외에커맨드객체가할수있는것은? 427 요약 428 PART VIII 성능과객체액세스 429 CHAPTER 21 :: 플라이웨이트 431 플라이웨이트패턴이란? 432 플라이웨이트패턴은언제사용하면좋을까? 434 꽃의풀 (pool) 을생성하기 435 공유가능한꽃의설계와구현 437 요약 446 CHAPTER 22 :: 프록시 449 프록시패턴이란? 450 프록시패턴은언제사용하면좋을까? 452 가상프록시를사용해서이미지를지연-로드하기 452 그림섬네일뷰를설계하고구현하기 454 코코아터치프레임워크의프록시패턴사용 461 요약 464 PART IX 객체의상태 467 CHAPTER 23 :: 메멘토 469 메멘토패턴이란? 470 메멘토패턴은언제사용하면좋을까? 472 xi

프로오브젝티브 -C 디자인패턴 TouchPainter에서메멘토패턴사용하기 472 Scribble( 그림 ) 저장하기 473 Scribble( 그림 ) 복원하기 475 ScribbleMemento의설계와구현 476 코코아터치프레임워크의메멘토패턴 491 요약 495 찾아보기 497 xii

정성과최선을다했습니다. 한마디로요약해서독자여러분께드리고싶은제진심의표현입니다. 번역이라고하지만제가저술하는마음으로이일에임했고, 또그렇게마무리했습니다. 용어하나하나, 내용모두에걸쳐심사숙고하고여러차례에걸친원고검토끝에완성된이책을보게되니왠지제마음이흐뭇해집니다. 좋은내용을독자여러분께제대로전달할수있을것이라는기대감때문일겁니다. 옮긴이머리말 오랫동안 IT 실무를하면서여러가지테크놀로지들을경험하고사용했지만, 객체지향기반의소프트웨어개발은하면할수록그깊이에놀라게됩니다. 특히설계에핵심적인디자인패턴의경우는제가접한지가꽤오래되었지만더욱그렇습니다. 작금에는모바일관련애플리케이션개발에많은관심을갖다보니애플 ios나구글안드로이드플랫폼의애플리케이션설계에디자인패턴을적용하는것이매우중요하다고생각되는군요. 물론이들플랫폼의프레임워크에는이미많은디자인패턴이적용되어있습니다. 그러나각프레임워크를기반으로앱개발시고려할디자인패턴은우리가직접찾아구현해야지만그혜택을누릴수있습니다. 많은분들이디자인패턴에대해관심을갖고나름대로파악하느라노력을많이하셨을겁니다. 그러나매번파악하는데만그치면실제자기것이될수없습니다. 어떤플랫폼이나분야의애플리케이션을개발하든설계에적용하려는노력과시도가필요합니다. 그런의미에서이책은좋은시도와방법을알려준다고생각합니다. ios의코코아터치프레임워크를기반으로아이폰이나아이패드의모바일앱개발을하려는 ( 또는하고있는 ) 개발자들이라면이책을꼭읽어보시기를권합니다 (Objetive-C는어느정도알고계실거구요 ). 그리고플랫폼과프레임워크는달라도구글안드로이드기반의모바일앱을개발하는분들도읽어보시면도움이될겁니다 (Java를잘아실것이므로디자인패턴을이해하고그것의적용을파악하는데는큰문제없습니다 ). 이책은출간전부터관심을갖고있었고, 번역을해봐야겠다는생각을했었습니다. 번역하는저는또다시자신과의고된싸움을시작하는셈이었지만, 모바일앱개발시의디자인패턴적용과구현방법을다루고있으므로여러개발자분들께도움이될거라고생각했기때문입니다. 이책을번역하면서다음과같은부분에중점을두었습니다. xiii

프로오브젝티브 -C 디자인패턴 1. 용어를잘이해하는것이제일중요하므로용어선정에유의하였습니다. 때로는용어하나때문에많은시간을생각하기도했지요. 그리고디자인패턴의명칭은알기쉽게하기위해원어에가깝게선정하였습니다. 이렇게하는게실무에서사용할때도도움이되실겁니다. 그리고번역용어내역을따로추가하였습니다. 2. 여러분의이해를돕기위해보충설명을많이넣었습니다. 디자인패턴은용어나내용이추상화수준이높아많이까다롭습니다. 그래서번역도쉽지않지만, 가급적여러분의이해에도움이될수있게노력했습니다. 3. 원서에서결함이있는내용을하나하나확인해가면서수정하였습니다. 전체적인문맥이맞지않는부분이있었고 ( 한참고민후에보니엉뚱한문장이끼워진것이더군요 ), 클래스등의이름이잘못된경우도더러있었습니다. 참으로긴시간이었던것같습니다. 독자들에게도움이될수있는책을만들어야한다는집념이없었다면벌써그만두었을것입니다. 기간이많이늦어졌음에도항상신뢰와믿음을갖고많은배려를해주신제이펍출판사의장성두사장님께감사드립니다. 2012 년 4 월 심재철드림 xiv

차 례 다운로드가능한 50만개이상의앱 (2011년 12월기준 ) 을가진애플의앱스토어는사회의여러방면에영향을주고있다. 그런용도의앱이있습니다 라는애플의캐치프레이즈가주는효과는분명히무시할수없다. 믿거나말거나 4개월간의저술작업을하는동안소파에앉아나는내아이패드를사용해서이책의많은부분을끝낼수있었다. 머리말 ios 개발자의수는매일증가하고있으며, 그들은이런흐름에편승하여자신들의다음킬러앱으로부자가되길원한다. 이책의저술시점을기준으로전세계에는대략 5만명이상의 ios 개발자들이있다. 그리고그수는빠르게늘어나고있다. 만일여러분이 ios 앱개발을신중하게고려하고있고, 좋은소프트웨어설계원리를사용해서더욱생산성있는개발능력을갖추고싶다면바로이책이여러분을위한것이다. 나는현재 ios 앱개발자이며, 앱개발에따르는고통과이득을잘알고있다. 새로운프로그래밍언어를배우는것은결코쉽지않다. 코코아터치프레임워크를살펴보면설계와구조가잘되어있다는것을쉽게알수있다. 그것의설계자들이잘알려진 ( 또는아직알려지지않은 ) 디자인패턴들을다양한프레임워크기반구조에사려깊게반영했기때문이다. 따라서여러분이나나와같은개발자들이사용하는데신축성과유연성이좋다. 그리고대부분의프레임워크에서같은타입의패턴들을몇번이고재사용한다. 따라서나중에프레임워크에추가되는어떤요소이든애플리케이션개발자들이힘들게다시배우지않고소화할수있다. 코코아터치프레임워크에서사용되는패턴들을이해하는것은시작에불과하다. 만일여러분이프로젝트의설계에충분한시간을배려하지않고킬러앱의아이디어가떠오르자마자곧바로코딩을시작한다면, 나중에더많은기능을그앱에추가할때까지그것을제대로사용하지도못하게될것이다. 최악의경우에그코드는관리가불가능하게되어여러분 ( 또는같은팀의다른개발자들 ) 이쓰지않고버리게된다는것이다. 결국에는새로운기능향상에초점을두는대신에코드결함을땜빵하느라더많은시간을낭비하게될수있다. xv

프로오브젝티브 -C 디자인패턴 프레임워크의장점을충분히살리려면디자인패턴을잘이해하고구현할때적합하게적용해야한다. 이책은정통디자인패턴의원조인 Design Patterns: Elements of Reusable Object-Oriented Software (Gang of Four, GOF라고부르는 Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides 공저 ) 책에서영감을받아저술되었다. 이책의각장에서는그책에정의된패턴의상세내역을참고하고있다. 디자인패턴의사용이중요하다는것은작금의여러소프트웨어프로젝트에서인식되고있다. 대부분의코코아터치프레임워크는 Objective-C로작성되었다. 그리고이책의저술시점을기준으로볼때, Objective-C를사용해서디자인패턴구현방법을설명하는책이전혀나와있지않다. 이책의목적은 ios 플랫폼의코코아터치앱개발을위해 Objective-C를사용해서정통디자인패턴을구현하는방법을알려주는첫번째지침서가되는것이다. 여러분은 ios 개발자로더좋은삶을누리고싶을것이다. 그렇지않은가? 애플리케이션소프트웨어설계의모범적인실무사례를알지못한다면, 개발자체가헛되게되거나아무성과없이끝나게될것이다. 또한이미동작이입증된것을재사용하는것이앱스토어나전반적인소프트웨어마켓의빠른변화를따라잡는핵심이다. 이책의내용을인내심을갖고이해하고각자의실제프로젝트에적용하는노력을한다면, 여러분은디자인패턴의장점을곧경험하게될것이다! 이책을위한웹사이트를만들어두었다. 주소는 www.objective-c-design-patterns.com이다. 이웹사이트를방문하면이책과관련된좋은정보를볼수있을것이다. 그리고또한여러분의성공스토리도공유할수있으며, 각자프로젝트에디자인패턴을사용할때접한애로사항들도공유할수있을것이다. 이책의소스코드는출판사웹사이트인 www.apress. com에서다운로드할수있다. 좋은코드작성을위하여! 카를로청 (Carlo Chung) xvi

차 례 카를로청 (Carlo Chung) 은컴퓨터과학자이자기계를갖고실험하기좋아하는땜장이이면서아마추어사진가다. 그는컴퓨터공학석사학위를받았으며, 인공지능의한분야인컴퓨터비전을전공하였다. 인공지능이나작은장치에관한것이라면사족을못쓴다. 아이폰을더 지능적 이고 휴머노이드 하게만드는방법에대해상상하기를좋아한다. 자신의컴퓨터비전지식을아이폰플랫폼에적용하였으며, 여러앱을개발하였다. 그중두개는애플앱스토어의첫페이지에올라있으며, 하나는사진및비디오카테고리에서최고매출앱목록에올라있다. 컴퓨터앞에없을때는드럼밴드를연주하고있거나멋진사진을얻기위해야외로나가곤한다. 지은이소개 카를로청 xvii

제임스뷰캐넥 (James Bucanek) 은지난 30년간마이크로컴퓨터시스템의프로그래밍과개발을하였다. 내장형소비재로부터산업용로봇까지그는다양한기술분야의경험이있다. 제임스는현재매킨토시와아이폰소프트웨어개발에중점을두고일을하고있다. 프로그램을작성하지않을때는예술에빠져지낸다. 그는영국의 Royal Academy of Dance로부터고전발레준학사학위를받았으며, 이따금아담스발레학교에서발레를가르치곤한다. xviii

차 례 이게저술하기정말힘든책이라는걸알고계시는거죠? 이말은 Apress 출판사의기획담당편집자와의첫전화통화에서들었던경고였다. 나에대한그의신뢰와믿음을바탕으로나는 2010년여름에이책을저술하는긴여정을시작하였다. 우선프로젝트팀전체가구심점을갖고일할수있도록도와주신 Corbin Collins 총괄편집자께감사드린다. 그리고좋은책을만드는데도움을주느라편집자리뷰시아낌없는조언을해주신 Douglas Pundick 개발담당편집자께감사드린다. 또한아낌없는지원과인내를해주신 Michelle Lowman 기획담당편집자께감사드린다. 그리고이책이출판되기직전까지도중요한논평을아끼지않으신 James Bucanek 기술검토자께감사드리며, 훌륭한책으로만들기위해흠잡을데없는원고편집의수고를아끼지않으신 Mary Ann Fugate와 Mary Behr 원고편집담당자들께감사드린다. 또한 Apress 출판사의모든분들께감사드린다. 그분들의도움이없었다면이책의출판은불가능했을것이다. 자기분야의전문지식을통해서이책의각장을리뷰하느라도움을주신 Michael Fredrickson과 Sreenivasa Busam 님에게도감사를드리고싶다. 마지막으로, 기술서적저술의전문가이면서정확성과인내를가지고내책을리뷰하는데도움을주신 Mike Hambleton 님께감사를드린다. xix