Cracking iphone and Android Native Development: Cross-Platform Mobile Apps Without the Kludge by Matthew Baxter-Reynolds Original English language edition published by Apress, Inc. Copyright c 2010 by Apress. Korean edition copyright c 2011 by J-PUB. All rights reserved. 이책의한국어판저작권은대니홍에이전시를통한저작권사와의독점계약으로제이펍출판사에있습니다. 신저작권법에의해한국내에서보호를받는저작물이므로무단전재와무단복제를금합니다. 초판 1 쇄발행 2011 년 7 월 11 일 지은이매튜박스터레이놀즈옮긴이배장열 펴낸이장성두 책임편집안주연 본문디자인초심디자인 표지디자인미디어픽스 주소경기도파주시교하읍파주신도시에이 15-1 블록한빛마을휴먼빌 201-502 전화 070-8201-9010 팩스 02-6280-0405 홈페이지 www.jpub.kr 펴낸곳제이펍 출판신고 2009 년 11 월 10 일제 406-2009-000087 호 용지신승지류유통 인쇄해외정판사 제본춘산제본 ISBN 978-89-94506-20-3 (13560) 값 28,000 원 이책은저작권법에따라보호를받는저작물이므로무단전재와무단복제를금지하며, 이책내용의전부또는일부를이용하려면반드시저작권자와제이펍의서면동의를받아야합니다. 잘못된책은구입하신서점에서바꾸어드립니다. 제이펍은독자여러분의책에관한아이디어와원고투고를기다리고있습니다. 책으로펴내고자하는아이디어나원고가있으신분께서는책에대한간단한개요와차례, 구성과저 ( 역 ) 자약력등을메일로보내주세요. ( 보내실곳 : jeipub@gmail.com)
아이폰과안드로이드기반의 CHAPTER 1 소개 1 이책의목적 3 이책의구성 4 도움을받을수있는곳 6 정리 6 CHAPTER 2 Six Bookmarks 의서버서비스 7 API 계정만들기 8 사용자만들기 9 Users 서비스 11 RESTful 웹서비스 12 호출테스트하기 12 로그온작업검사하기 12 Bookmarks 서비스 16 테스트데이터추가하기 17 OData 로작업하기 18 OData 쿼리 22 OData 를사용하여업데이트알리기 23 로그온한사용자에게데이터를제한하기 23 정리 23 iv
차례 CHAPTER 3 애플리케이션아키텍처와기능명세서 25 태블릿? 슬레이트? 25 기능명세서 26 로그온하기 26 동기화하기 27 내비게이터 28 즐겨찾기구성하기 29 즐겨찾기하나를구성하기 ( 싱글턴구성 ) 30 구현하지않는기능들 31 애플리케이션아키텍처와기술명세서 31 접근법 31 ORM 33 서버통신 39 플랫폼별기술적접근과정 40 정리 43 CHAPTER 4 안드로이드 : 툴셋설치하기 45 왜안드로이드가먼저인가? 45 툴셋설치하기 46 자바설치하기 46 이클립스설치하기 46 안드로이드설치하기 47 이클립스에 ADT 설치하기 50 에뮬레이터구성하기 54 안드로이드용 Hello, World 애플리케이션작성하기 57 Hello, World 인사하기 60 선언적레이아웃 61 버튼에액티비티연결하기 63 정리 68 v
아이폰과안드로이드기반의 CHAPTER 5 안드로이드 : 로그온폼만들기와 REST 서비스소비하기 69 프로젝트생성하기 69 코드표현규칙 71 RESTful 서비스호출하기 71 웹요청하기 72 API 계정인증하기 77 UsersService 를통해사용자인증하기 89 인터넷액세스허용으로권한설정하기 90 로그온폼생성하기 91 모델 / 뷰 / 컨트롤러 95 로그온하기 103 나를기억해주세요, 자동로그인 106 정리 109 CHAPTER 6 안드로이드 : SQLite 의 ORM 레이어 111 안드로이드용 SQLite 111 엔터티 112 EntityType 112 Entity 기본클래스생성하기 119 엔터티에값설정하기 121 Bookmark 빌드하기 127 EntityType 등록하기 129 짝퉁즐겨찾기표시하기 131 폼생성하기 131 즐겨찾기표시하기 137 즐겨찾기연결하기 142 vi Sync 클래스빌드하기 144
차례 서버의 Bookmarks OData 서비스호출하기 145 데이터베이스관리하기 153 SqlStatement 클래스와 ISqlStatementSource 인터페이스 156 테이블생성하기 158 Sqliteman 으로데이터베이스검사하기 161 데이터베이스에즐겨찾기쓰기 165 즐겨찾기읽기와내비게이터에표시하기 171 정리 177 CHAPTER 7 안드로이드 : 변경내용을서버로푸시하기 179 로컬의변경내용캡처하기 180 SQL 필터를제한하기 180 삭제된엔터티를뷰에서제외하기 186 즐겨찾기를오디널별로가져오기 187 구성폼빌드하기 188 싱글턴구성하기 212 변경내용을서버로푸시하기 221 로컬의변경내용파악하기 221 삽입, 업데이트, 삭제를서버에요청하기 226 HTTP MERGE 로업데이트하기와 HTTP POST 로삽입하기 227 필드를서버에서사용할수있도록표시하기 227 정리 238 vii
아이폰과안드로이드기반의 CHAPTER 8 ios: 툴셋설치하기 239 아이패드개발 239 Xcode 설치하기 239 닷넷및자바개발자를위한오브젝티브-C 입문과정 240 오브젝티브-C 의문제점들 241 메서드호출하기 ( 일명 메시지보내기 ) 242 프로퍼티 ( 그리고간략히언급하는메모리관리 ) 245 메서드 252 네임스페이스 254 오브젝티브-C 에서가장골치아픈점 254 아이폰용 Hello, World 255 사용자인터페이스구성하기 257 윈도우생성하기와뷰보여주기 264 정리 267 CHAPTER 9 ios: 로그온폼작성하기와 REST 서비스소비하기 269 프로젝트생성하기 269 로그온폼 270 로그온폼사용자인터페이스생성하기 271 로그온폼보여주기 275 그룹화뷰에관한특강 278 코드표현규칙 279 서비스호출하기 280 로그온요청캡처하기 280 API 서비스호출하기 286 프록시클래스작성하기 287 Users 서비스호출하기 318 진행중임을알리기 325 viii 정리 327
차례 CHAPTER 10 ios: SQLite 의 ORM 레이어 329 잠시짚고넘어가야할이야기 330 엔터티 330 SBEntityType 클래스 330 SBEntity 클래스 339 엔터티에값설정하기 342 SBBookmark 작성하기 347 SBEntityType 인스턴스생성하기 350 짝퉁즐겨찾기표시하기 352 뷰생성하기 352 뷰엔진빌드하기 357 즐겨찾기표시하기 362 내비게이션처리하기 365 Sync 클래스빌드하기 367 서버의 Bookmarks OData 서비스호출하기 367 데이터베이스작업 384 SBDBHelper 빌드하기와오류처리구현하기 386 데이터베이스에즐겨찾기쓰기 401 정리 421 CHAPTER 11 ios: 변경내용을서버로푸시하기 423 즐겨찾기구성하기 423 데이터를테이블에넣기 426 즐겨찾기정렬하기 430 싱글턴뷰 431 즐겨찾기편집하기 437 삭제메서드구현하기 444 즐겨찾기추가하기 445 ix
아이폰과안드로이드기반의 즐겨찾기삭제하기 447 수동으로동기화하기 451 변경내용을서버로푸시하기 452 작업항목 455 OData 변경요청하기 460 서버에없음 으로필드지정하기 462 요청생성하기 463 processworkitems 수정하기 470 정리 472 CHAPTER 12 ios: 모노터치 473 큰틀에서본모노 474 이장의구성 475 모노터치설치하기 475 Hello, World 476 코드비하인드검사하기 480 버튼연결하기 481 프로젝트실행하기 483 Six Bookmarks API 의 RESTful 서비스호출하기 484 프로젝트생성하기 484 ServiceProxy 등등을빌드하기 484 서비스메서드호출하기 490 정리 494 찾아보기 495 x
역자머리말 아이폰과안드로이드기반의크로스플랫폼앱개발 국토해양부에따르면 2010년 12월우리나라에등록된전체자동차수가 1,794만대라고한다. 자동차를소유하고나서누리는생활은그전과사뭇다르다. 더나아졌다기보다는행동반경이넓어져그만큼다양한경험을누릴수가있다는점은분명하다. 자동차와직접적으로비교하기에는무리가있지만스마트폰또한우리의삶속으로깊이들어와많은변화를이끌어냈다. 올해안으로스마트폰보급대수가 2천만을넘길것이라는언론보도만봐도스마트폰이우리의삶에얼마만큼영향을미칠지는어림짐작할수있다. 이미스마트폰은단순한흥밋거리를제공하는수단을뛰어넘어문화를누릴수있는도구가됐고, 스트레스를해소할수있는도구로도, 나아가학습의도구로도자리매김한지오래다. 물론스마트폰이주는스트레스도만만치않지만말이다. 스마트폰이우리생활속으로깊이파고들면서관련시장도커졌고, 앞으로더커질것이라는전망에이의를제기하는사람은거의없다. 자동차를구입하고달랑자동차만운행하는사람이없듯, 우리는스마트폰을구입하면케이스나보호필름, 열쇠고리등액세서리로예쁘게꾸며주고, 다양한콘텐츠를즐기기위해유료앱을구입한다. 스마트폰이라는하드웨어비용보다더많은비용을앱에지불하는경우도어렵지않게찾아볼수있다. 그래서앱시장또한폭발적으로커지고있고, 얼마나많은앱이있느냐가스마트폰을선택하는기준중의하나가되는현실에서, 나도멋진앱을만들고싶다고미래의계획을세우는사람또한많아졌다. 안드로이드와 ios가 펩시와코카콜라 가될것이라는저자의예상처럼, 우리가접하는수많은앱은대개이두종류에속한다. 이책은동일한앱을이쪽에서는어떻게접근하고저쪽에서는접근하는지꽤깊이있게보여준다. 원저서가출간된지시간이많이흘렀지만, 이쪽에서는어떻게접근하고저쪽에서는어떻게접근하는지에관한이책의주제는빛이바래지않는다고생각한다. 다만, 1장의경우흘러간옛이야기여서현재상황을반영하지못한다. 그러나지금으로부터 1년전모바일을둘러싼세상이어떻게돌아갔는지돌이켜보면지금의세상도이해하기쉬워지고, 나아가앞으로어느방향으로흘러갈지도예측해보는데적잖은도움이되리라생각한다. 이번역서에서안드로이드는 2.3 진저브레드에서모두테스트를하였고, 아이폰개발부분은 Xcode 4 파이널버전, ios SDK 4.3으로, 그리고모노터치는최신버전인 4.0.3으로업데이트하였음을밝혀둔다. xi
역자머리말 아이폰과안드로이드기반의크로스플랫폼앱개발 하루가다르게, 아니한시간이다르게쏟아져나오는최신용어를일일이온전한우리말로대체하기가쉽지않은것은원문을우리말로옮기는입장에서변명이지만사실이다. IT 용어가일부를제외하면지극히평범하고쉬운단어로표현된다는점을고려하여용어자체는그대로가져다써도문장의표현만큼은쉽게다갈수있도록정성을기울였으나어떻게받아들여질지걱정이앞선다. 아무쪼록편하게읽히기를바랄뿐이다. 이책에서가장중요한곳은 2장과 3장이다. 세부코드내용에더많은관심을두는독자라면안드로이드의 4장에서 7장까지, ios의 8장에서 11장까지가더큰관심을불러오겠지만, 앱개발의방향과접근방식을이해하려면 2장과 3장이가장중요하다고할수있다. 또한처음부터차근차근읽지않는경우에는안드로이드와 ios의각장에서서로대응되는곳을비교해가며읽는것도괜찮은접근방식이라고생각한다. 펩시가됐든코카콜라가됐든, 소비자입장에서야자신의기호에맞는제품을선택하면그뿐이고, 제조회사는타사와의경쟁에서우위를점하기위해각고의노력을하겠지만, 앱을개발하는입장에서는뛰어나고멋진아이디어를어느한운영체제용으로만개발하여시장에내놓을이유는없다. 한쪽에익숙하고다른쪽에낯설다하여어느한쪽만고집할이유도없고, 어느한쪽이더낫다고옹호하거나반대로폄하할이유도없다. 아무쪼록이책으로인해여러분의뛰어나고멋진아이디어가사용자에게편리함을제공할수있도록활용되기를바랄뿐이다. 책을읽다가궁금한점이생기면저자의트위터 (@mbrit) 로문의해도되고, 역자의이메일 (JustDoIt709@gmail.com) 로문의해도된다. 트위터라는훌륭한의사소통수단덕분에시간대만맞으면언제든지직접저자에게문제해결을위한조언을거의실시간으로얻을수있다. 끝으로이책이나올수있도록믿고지켜봐주신장성두실장님께정말큰고마움을드린다. 달리고마움을표현할단어가마땅치않아아쉬울뿐이다. 그리고사랑하는아내와딸서정이에게도고마움을전한다. 컴퓨터앞에만앉아서많이놀아주지도못한아빠를이해해주고, 위로까지해준소중한딸이다. 아무쪼록이책이독자들에게가치있게활용되기만을바란다. 2011년 6월배장열 xii
저자소개 아이폰과안드로이드기반의크로스플랫폼앱개발 매튜박스터레이놀즈 Matthew Baxter-Reynolds 매튜박스터레이놀즈는소프트웨어개발컨설턴트로서현재팀구조에서최대의성과를끌어낼수있도록컨설팅하고있다. 공개표준, 마이크로소프트서버, 모바일플랫폼의 빅 4 에특별히관심이많다. 강사로서다수의개발관련책을집필한저자이기도하다. 현재영국에거주하며, 모바일기술솔루션을주업무로하고있다. LinkedIn 사이트인 www.linkedin.com/in/mbrit로연락을주고받을수있으며, 이책과관련된이야기는 http://www.multimobiledevelopment.com/ 을통해나누고있다. xiii
기술검토자소개 아이폰과안드로이드기반의크로스플랫폼앱개발 매트피체트 Matt Fitchett VB.NET 경험이풍부한매트는 2004년에 DVD/CD 중심의작은전자상거래회사 (play.com) 에합류하여 C# 을다뤘다. play.com은소프트웨어개발자인매트의중추적인역할에힘입어유럽에서가장큰전자상거래회사중하나로성장했다. 매트는 6년반동안의즐거운경험을마무리하고모바일기술을전문적으로다루기로정했다. 소프트웨어개발자나기업을위한중대한성장분야라는인식이있었기때문이다. 매튜박스터레이놀즈와함께일하면서매트는다양한기술플랫폼 ( 안드로이드, 아이폰, 윈도우폰 7 등 ) 의프로토타입을만들어내며모바일설문조사소프트웨어시장을선도했다. 매트와그의사랑하는아내사라 (Sarah) 는어린아들, 아이작 (Issac) 을두었고, 에드문즈의한아름다운도시에살고있다. 매트는영화, 게임, 음악을즐기며, 맛좋은음식을곁들인맥주를좋아한다. 그리고규칙적으로무에타이를연마하고있다. 그가운영중인블로그인 www.mattfitchett.com에는모바일기술에관한논의를포함하여그가즐기는여러가지가모두담겨있다. xiv
감사의글 아이폰과안드로이드기반의크로스플랫폼앱개발 내아내인앤디 (Andy) 에게크나큰고마움을전한다. 책을쓰는동안인내와지원을보여주었다. 그리고이책을검토하고탁월한제안을서슴지않았던매트피체트 (Matt Fitchett) 와조너선하셀 (Jonathan Hassel), 아니타카스트로 (Anita Castro) 등 Apress의여러관계자분들에게감사의말을전한다. 그들의뛰어난노력이없었다면이책은세상에나오지못했을것이다. xv