저자 아론 힐리가스, 조 콘웨이
역자 최윤선, 백선덕
출간예정일 2012년 1월 10일(화)
정가 35,000원
페이지 640p
판형 190 x 245
ISBN 978-89-94774-08-4 (93560)
원서정보 iOS Programming: The Big Nerd Ranch Guide 2/e
책 소개
아론 힐리가스의 아이폰/아이패드 프로그래밍
“이 책은 종종 여러분이 이해하기도 전에 코드를 먼저 입력하라고 한다. 아마도 자신이 잘 알지도 못하는 코드를 입력만 하는 잘 훈련된 원숭이가 된 것처럼 느낄 수도 있다. 하지만 코딩을 배우는 가장 좋은 방법은 잘못된 부분을 찾아 고치는 것이다. 이런 기본적인 디버깅 과정에서 복잡한 코드를 제대로 이해하게 된다. 그런 이유로 코드를 직접 입력하기를 권유한다. 단순히 코드를 내려 받을 수도 있지만, 복사해서 붙여 넣는 것은 프로그래밍이 아니다. 우리는 여러분이 이 책을 통해 더 잘 배우길 바란다.
독자 여러분에게 왜 이런 이야기를 하는 걸까? 이런 방식은 신뢰가 필요하기 때문이다. 그리고 우리를 믿고 따르길 바라기 때문이다. 이런 방식에는 인내심도 요구된다.
이 책의 각 장을 진행하면서 어떤 일들이 일어나고 있는지 설명하며 여러분이 편안하게 느끼도록 노력할 것이다. 하지만 때로는 우리를 믿고 따라와야 할 때도 있다. 당장 이해되지 않는 개념이 나왔다고 낙담할 필요는 없다. 일부러 모든 지식을 한 번에 전달하지 않는다는 것을 기억하라. 어떤 개념이 당장 명확하게 이해되지 않더라도 뒷부분에서 필요할 때 자세히 다룰 것이다. 시작할 때는 명확하지 않았던 개념들이 처음으로 구현한 순간 갑자기 이해되는 경험을 하게 될 것이다.”
– 아론 힐리가스, 조 콘웨이
《iOS, 날개를 달다》는 iOS, Xcode 및 iPad 개발을 아우르는 내용으로 업데이트되고 확장되어 iOS 앱을 개발하기 위한 필수적인 도구와 기법을 안내한다.
이 책은 Big Nerd Ranch에서 저자들의 인기 있는 강의 프로그램인 iOS 부트캠프 코스와 검증된 강의 방법에 기초를 두고 있다. 개념과 코딩을 함께 다루어 유용한 가르침이 될 것이다.
이 책을 마친 후 여러분은 iOS 프로젝트를 다루기 위해 필요한 지식, 경험 그리고 자신감을 갖게 될 것이다.
이 책에서 다루는 내용
■ Xcode 4, 인스트루먼트 및 디버거
■ 아이폰과 아이패드 모두를 위한 유니버설 앱
■ 멀티-터치, 모션 이벤트 및 가속센서 데이터 접근하기
■ 툴바, 네비게이션 컨트롤러 및 스플릿 뷰 컨트롤러
■ 코어 로케이션 및 국제화
■ 레퍼런스 카운팅, 리테인 카운트 및 메모리 관리
■ 오브젝티브-C의 블록 및 카테고리
■ 음악과 비디오 플레이하기
■ 백그라운드 실행과 멀티 태스킹
■ 데이터 저장하기/불러오기: 아카이빙과 코어 데이터
■ 푸시 노티피케이션
■ 웹 서비스와 통신하기
■ Bonjour와 NSStream을 사용하는 네트워크 프로그래밍
iOS 개발자가 되려면 세 가지 기본 문제를 해결해야 한다
■ 오브젝티브-C 언어를 배워야 한다. 오브젝티브-C는 C 언어를 약간 확장한 간결한 언어다. 이 책 앞부분의 네 개 장을 본 후에는 오브젝티브-C의 실무 지식을 갖추게 되므로 너무 걱정하지 않아도 된다.
■ 몇 가지 중요한 개념을 정확히 이해해야 한다. 메모리 관리 기법, 델리게이트, 데이터 저장, 뷰 컨트롤러의 사용법 등이 이에 해당한다. 이런 중요한 개념들을 이해하는 데는 시간이 좀 걸리지만, 이 책의 중간까지 읽은 후에는 잘 이해할 수 있게 될 것이다.
■ 프레임워크를 정복해야 한다. 최종 목표는 iOS의 모든 프레임워크에 있는 모든 클래스와 모든 메소드의 사용법을 아는 것이다. 이는 평생 걸릴 프로젝트다. iOS에는 3000여 개의 메소드와 200여 개의 클래스가 있다. 더욱 어려운 것은 애플이 새로운 iOS 버전마다 새 클래스와 새 메소드를 추가한다는 것이다. 이 책에서는 iOS SDK를 구성하는 각각의 하위 시스템을 배우지만 모든 하위 시스템을 깊이 다루지는 않을 것이다. 우리의 목표는 여러분을 애플의 참고문서를 검색하고 이해할 수 있는 위치까지 이끄는 것이다.
이 책의 내용은 Big Nerd Ranch의 iOS 개발 교육을 위한 부트캠프에서 여러 차례 사용되어 왔다. 이 책의 내용은 충분히 검증되었으며, 수백 명 이상이 iOS 앱 개발자가 될 수 있도록 도와주었다. 이 책이 여러분에게도 도움이 되기를 진심으로 바란다.
독자대상
초중급자용
저자소개
아론
NeXT와 애플에서 일했으며 Big Nerd Ranch의 iOS 프로그래밍 클래스를 가르치고 있다. NeXT에서는 OpenStep에 대한 첫 코스와 오늘날의 코코아(Cocoa) 도구의 전신을 작성했다. 이 책은 Big Nerd Ranch 코스에 기초하고 있으며 OpenStep과 코코아에 관한 거의 20년간의 작업으로부터 영향을 받았다.
조 콘웨이
Big Nerd Ranch의 iOS 시니어 강사로 처음부터 iOS 플랫폼에 대한 컨설팅을 해왔다. 위스콘신 대학교를 졸업했고 OS X 이후부터 오브젝티브-C와 코코아 코드를 작성해왔다. 조는 아주 인기가 많은 Big Nerd Ranch의 iOS 부트캠프의 교재를 작성했고, 이 책 또한 그의 교재에 기초하고 있다.
역자소개
최윤선
한양대학교 전자계산학과 학사 학위를 받았으며 LG 소프트, 드림라인, 네오위즈를 거쳐서 11년간 줄곧 인터넷분야에서 프로그래머로서 일해왔다. 현재는 iOS 프로그래밍에 몰두하고 있다.
백선덕
한양대학교와 포항공과대학에서 산업공학과 학사와 석사 학위를 받았으며 한국오라클, 호주 오라클을 거쳐서 13년간 소프트웨어 분야에서 일해왔다. 현재는 호주 현지회사에서 소프트웨어 엔지니어로 근무중이다.
목차
Chapter 01 간단한 iOS 앱
Xcode 프로젝트 만들기
인터페이스 만들기
모델-뷰-컨트롤러
선언
커넥션 만들기
메소드 구현하기 43
빌드하고 시뮬레이터에서 실행하기
앱 배포하기
앱 아이콘
런치 이미지
Chapter 02 오브젝티브-C
객체
인스턴스 사용하기
RandomPossessions 툴 작성하기
오브젝티브-C 클래스의 하위 클래스 만들기
예외와 콘솔 윈도우
고속 열거형
도전 과제
Chapter 03 메모리 관리
메모리 관리의 기본
레퍼런스 카운팅
좀 더 흥미 있는 분을 위해: 더 심화된 메모리 관리
Chapter 04 델리게이션과 코어 로케이션
프로젝트, 타깃, 프레임워크
코어 로케이션
델리게이션
디버거 사용하기
도전 과제: 헤딩
좀 더 흥미 있는 분을 위해: 빌드 페이스, 컴파일러 에러, 링커 에러
Chapter 05 맵킷과 텍스트 입력
객체 다이어그램
맵킷 프레임워크
인터페이스 프로퍼티
MapView 델리게이트 되기
도전 과제: 어노테이션 확장
도전 과제: 역지오코딩(Reverse Geocoding)
Chapter 06 UIView 하위 클래스 만들기
커스텀 뷰 만들기
텍스트와 그림자 그리기
UIScrollView 사용하기
확대하기
상태 바 가리기
도전 과제: 색깔
좀 더 흥미 있는 분을 위해: 리테인 사이클
좀 더 흥미 있는 분을 위해: 뷰 다시 그리기
Chapter 07 뷰 컨트롤
뷰 컨트롤러와 XIB 파일
뷰 컨트롤러 사용하기
나타났다 사라지는 뷰
뷰 컨트롤러 수명 주기와 로우-메모리 경고
뷰 컨트롤러의 하위 클래스와 템플릿
도전 과제: 맵 탭
Chapter 08 가속센서
가속센서 설정하기
가속센서 데이터 구하기
가속도의 위치와 크기
가속센서 데이터 사용하기
가속센서 데이터 다듬기
흔들기 제스처 감지하기
도전 과제: 색 바꾸기
좀 더 흥미 있는 분을 위해: 필터링과 주파수
좀 더 흥미 있는 분을 위해: 레티나 디스플레이
Chapter 09 노티피케이션과 회전
노티피케이션 센터
UIDevice 노티피케이션
자동회전
가로 모드 강제설정하기
도전 과제: 근접 노티피케이션
좀 더 흥미 있는 분을 위해: 자동회전을 오버라이드하기
Chapter 10 UITableView와 UITableViewController
Homepwner 앱 시작하기
UITableViewController
UITableView의 데이터 소스
UITableViewCells
코드 스니펫 라이브러리
도전 과제: 섹션
Chapter 11 UITableView 편집하기
편집 모드
행 추가하기
행 삭제하기
행 이동하기
Chapter 12 UINavigationController
UINavigationController
추가적인 UIViewController
UINavigationController로 내비게이트하기
도전 과제: 숫자 패드
Chapter 13 카메라
이미지 보여주기와 UIImageView
도전 과제: 이미지 삭제하기
좀 더 흥미 있는 분을 위해: 비디오 녹화하기
Chapter 14 UIPopoverController와 모달 뷰 컨트롤러
Homepwner 유니버설로 만들기
UIPopoverController
모달 뷰 컨트롤러
Chapter 15 저장, 읽기, 멀티태스킹
앱 샌드박스
파일 경로 구성하기
아카이빙
앱 상태, 변환, 멀티태스킹
NSData를 파일시스템에 쓰기
로우-메모리 경고에 대해
모델-뷰-컨트롤러-스토어 디자인 패턴
도전 과제: Whereami 아카이브하기
좀 더 흥미 있는 분을 위해: 앱 상태 변환
좀 더 흥미 있는 분을 위해: 파일시스템에 읽고 쓰기
좀 더 흥미 있는 분을 위해: 앱 번들
Chapter 16 UITableViewCell의 하위 클래스 만들기
HomepwnerItemCell 생성하기
이미지 조작
도전 과제: 액세서리 인디케이터
도전 과제: 메인 이미지 줄이기
Chapter 17 코어 데이터
객체-관계 매핑
Homepwner를 코어 데이터로 이동하기
SQL에 대해 좀 더 알아보기
영구적 메커니즘의 장단점
도전 과제: 새로운 Asset 타입
도전 과제: 아이패드에서의 Asset
Chapter 18 현지화
NSLocale을 이용해 현지화하기
리소스 현지화하기
NSLocalizedString과 문자열 테이블
도전 과제: 또 다른 현지화
좀 더 흥미 있는 분을 위해: 국제화에서 NSBundle의 역할
Chapter 19 설정
Whereami 갱신하기
NSUserDefaults
좀 더 흥미 있는 분을 위해: 설정 앱
Chapter 20 터치 이벤트와 UIResponder
터치 이벤트
TouchTracker 앱 만들기
터치를 라인으로 바꾸기
응답자 체인
도전 과제: 저장하기와 로딩하기
도전 과제: 원
좀 더 흥미 있는 분을 위해: UIControl
Chapter 21 인스트루먼트
정적 분석기
인스트루먼트
Xcode 스킴
빌드 세팅
Chapter 22 코어 애니메이션 레이어
레이어와 뷰
CALayer 생성하기
레이어 컨텐트
암시적 애니메이션이 가능한 프로퍼티
좀 더 흥미 있는 분을 위해: 프로그램 코드로 컨텐트 만들어내기
좀 더 흥미 있는 분을 위해: 레이어, 비트맵, 컨텍스트
도전 과제: 동적 레이어 컨텐트
Chapter 23 CAAnimation으로 애니메이션 제어하기
애니메이션 객체
CABasicAnimation으로 회전하기
CAKeyframeAnimation으로 바운스하기
도전 과제: 추가 애니메이션
좀 더 흥미 있는 분을 위해: 프레젠테이션 레이어와 모델 레이어
Chapter 24 블록과 카테고리
TouchDrawView에 색 입히기
블록
카테고리
좀 더 흥미 있는 분을 위해: 메모리 관리와 블록
좀 더 흥미 있는 분을 위해: 콜백 옵션의 장단점
Chapter 25 웹 서비스와 UIWebView
웹 서비스
UIWebView
좀 더 흥미 있는 분을 위해: NSXMLParser
좀 더 흥미 있는 분을 위해: The Request Body
좀 더 흥미 있는 분을 위해: Credentials
도전 과제: 좀 더 많은 데이터
도전 과제: UIWebView 더 다루기
Chapter 26 UISplitViewController
Nerdfeed 분할하기
마스터-디테일 커뮤니케이션
세로 모드에서 마스터 뷰 컨트롤러 보여주기
Nerdfeed 앱을 유니버설하게 만들기
Chapter 27 미디어 재생과 백그라운드 실행
미디어플레이어 앱 만들기
시스템 사운드
시스템 사운드 등록하기
시스템 사운드 재생하기
압축된 오디오 파일
무비 파일 재생하기
백그라운드 프로세스
로우-레벨 API
도전 과제: 오디오 레코딩
Chapter 28 봉쥬르와 웹 서버
봉쥬르
HTTP 통신
좀 더 흥미 있는 분을 위해: TXTRecords
Chapter 29 푸시 노티피케이션과 네트워킹
푸시 노티피케이션을 위해 클라이언트 준비시키기
푸시 노티피케이션 전달하기
푸시 노티피케이션 보내기
클라이언트에서의 추가적 노티피케이션 처리
프로덕션 서버 및 향후의 할 일
좀 더 흥미 있는 분을 위해: 피드백 서비스
Chapter 30 후기
다음으로 할 일
자화자찬
이 책의 사용법
이 책은 우리가 빅 너드 랜치(Big Nerd Ranch: 필자들이 운영하는 교육 프로그램)에서 가르치는 수업에 기본을 두고 있으며 우리의 수업방법에 맞게 만들어졌다.
“난 매일 한 장씩 공부할 거야.”와 같은 실현 가능한 목표를 세워라. 한 장을 공략하려 할 때 적어도 한 시간은 방해 받지 않을 조용한 장소를 찾아가라. 이메일, 트위터 프로그램, 채팅 프로그램을 모두 꺼라. 멀티태스킹보다는 집중이 필요하다.
실제로 프로그래밍을 해라. 먼저 한 장을 전부 읽어도 된다. 하지만 직접 코딩을 해야 비로소 진정으로 자기 것이 된다. 프로그램을 작성해봐야, 더 중요하게는 디버깅을 해 봐야 진정으로 개념을 이해할 수 있다.
몇몇 연습문제는 보조적인 파일을 필요로 한다. 예를 들어 첫 번째 장에서는 퀴즈 앱을 위한 아이콘이 필요하다. 리소스와 솔루션은 다음 웹 사이트에서 내려받을 수 있다:
배우는 방법에는 두 가지가 있다. 남북전쟁에 대해 배울 때는 여러분이 이미 이해한 것에 구체적인 사실들만 더해가면 된다. 우리는 이것을 “이지 러닝(Easy Learning)”이라 한다. 그렇다. 남북전쟁에 대해 배우는 것은 시간이 오래 걸릴 수는 있지만 당황할 필요 없이 차근히 하기만 하면 누구나 할 수 있다.
그러나 iOS 프로그래밍은 “하드 러닝(Hard Learning)”이다. 아마 처음 며칠은 상당히 혼란스러울 것이다. 이 책을 쓰면서 여러분의 학습곡선을 완만하게 하려고 노력했다. 여러분이 좀 더 쉽게 배울 수 있는 두 가지 방법은 다음과 같다:
■ 이미 iOS 애플리케이션을 만드는 방법을 알고 있으며 당신의 질문에 답해 줄 사람을 찾아라. 특히 첫 앱을 디바이스에 올릴 때에는 경험자의 도움이 없다면 절망적인 상황에 빠질 수도 있다.
■ 잠을 충분히 잔다. 잠이 모자라면 뭘 배웠는지 기억하지 못한다.
이 책의 구성
이 책의 각 장은 다음과 같이 구성되어 있다. 먼저 iOS 개발에 대한 하나 이상의 개념을 가르치고 나서 실제로 프로그래밍을 하게 한다. 연습이 더 필요하다고 생각되면 각 장의 뒷부분에서 도전해볼 만한 주제를 소개한다. 최소한 몇 개는 도전해보길 권장한다. 이 주제들은 각 장에서 배운 개념을 더욱 공고하게 다져주며 iOS 프로그래밍에 자신감을 갖게 해준다. 마지막으로 각 장의 마지막에 나오는 “좀더 흥미 있는 분을 위해” 섹션에서는 앞에서 소개한 개념을 활용할 방법을 설명한다.
1장에서는 어느 정도 쉬운 앱을 개발하고 디바이스에 설치하면서 iOS 프로그램을 배우게 된다. 프로젝트 및 파일을 생성하는 과정을 겪으면서 Xcode와 iOS 시뮬레이터를 충분히 경험하게 될 것이다.
2장과 3장에서는 오브젝티브-C와 메모리 관리에 대한 개요를 배운다. iOS 앱을 만들지는 않지만 RandomPossessions라는 툴을 작성하고 디버깅할 것이다. (이 툴은 계속 사용될 것이며 10장에서 소개되는 Homepwner 앱에서는 이와 관련된 클래스를 사용하게 될 것이다.)
4장과 5장에서는 코어 로케이션과 맵 킷 프레임워크를 배우고 Whereami라는 지도 앱을 만들 것이다. 델리게이션 디자인 패턴, 프로토콜, 프레임워크, 객체 다이어그램 및 애플 문서를 사용해 볼 것이다.
6장과 7장에서는 Hypnosister와 HypnoTime 앱을 통해 iOS 유저 인터페이스에 초점을 맞출 것이다. 스크롤, 확대, 탭 바를 이용한 화면 간 이동과 함께 뷰와 뷰 컨트롤러를 사용해본다.
8장에서는 가속센서를 다룬다. 흔들기 제스처를 포함한 동작 이벤트를 다루기 위해 가속센서에서 데이터를 가져오고, 필터링하고, 사용하는 법을 배운다. HypnoTime 앱에 새로운 기능을 추가하기
위해 가속센서의 데이터를 사용하게 된다.
9장에서는 노티피케이션과 회전에 대해 배우면서 HeavyRotation이란 앱을 만든다. 또한 HeavyRotation을 아이패드 화면에도 잘 맞도록 하기 위해 오토리사이징을 사용할 것이다.
10장에서는 이 책에서 가장 큰 애플케이션인 Homepwner를 소개한다(“Homepwner”는 오타가 아니다. “pwn”의 의미는 www.urbandictionary.com에서 찾을 수 있다). 이 앱은 화재나 재난에 대비해 여러분의 소지품 목록을 기록하고 보관한다. Homepwner는 총 아홉 개의 장을 통해 구현이 완료된다.
10장, 11장, 16장에서 여러분은 정보 목록을 표시한다. 테이블 뷰, 뷰 컨트롤러, 데이터 소스에 관해 배운다. 데이터를 테이블에 표시하는 방법, 사용자가 테이블을 편집할 수 있게 만드는 방법, 인터페이스를 향상시키는 방법을 배운다.
12장에서는 7장에서 배운 내비게이션에 대해 상세히 다룬다. UINavigationContoller를 사용하는 방법을 배우고 Homepwner에 좀 더 정교한 인터페이스와 네비게이션 바를 추가한다.
13장에서는 카메라로 사진을 찍는 방법과 이미지를 Homepwner에서 표시하고 저장하는 방법을 배운다. NSDictionary와 UIImagePickerController도 배울 것이다.
14장에서는 아이패드를 위한 UIPopoverController와 모달 뷰 컨트롤러에 대해 배운다. 여기에서는 Homepwner를 아이폰과 아이패드 모두에서 자연스럽게 동작하는 앱으로 만든다.
15장에서는 데이터를 저장하고 불러오는 방법에 대해 살펴본다. 특히 NSCoding 프로토콜을 사용해 Homepwner 앱에 데이터를 저장할 것이다. 또한 멀티태스킹과 액티브, 백그라운드, 일시 중지와 같이 앱 상태를 변환하는 방법을 보여준다.
17장은 코어 데이터에 대한 도입부다. NSManagedObjectContext를 사용해 데이터를 저장하고 불러오도록 Homepwner 앱을 변경할 것이다.
18장에서는 국제화(internationalization) 및 지역화(localization)의 개념과 기법을 소개할 것이다. Homepwner를 지역화하면서 NSLocale, 문자열 테이블, NSBundle에 대해 배울 것이다. 이 장에서 Homepwner 앱이 완성된다.
19장에서는 사용자 설정을 저장하기 위해 NSUserDefaults를 사용하는 방법을 배운다.
20장에서는 TouchTracker라는 그림 그리기 앱을 만든다. 멀티터치를 지원하는 방법과 터치 이벤트에 대해 배운다. 또한 최초 응답자와 응답자 체인의 개념을 접하게 될 것이다. NSDictionary도 더 연습하게 될 것이다.
21장에서는 TouchTracker의 성능과 메모리 문제를 디버깅하면서 인스트루먼트에 대해 배운다. Xcode의 기능과 소스 코드 정적 분석기에 대해 다룰 것이다.
22장과 23장에서는 HypoTime 앱에 애니메이션을 구현하면서 레이어와 코어 애니메이션 프레임워크를 소개한다. 뷰 객체의 애니메이션 기능과 CABasicAnimation, CAKeyframeAnimation 같은 애니메이션 객체에 대해 배운다.
24장에서는 오브젝티브-C의 중요한 두 개념인 블록과 카테고리를 다룬다.
25장에서는 Nerdfeed 앱을 만들면서 웹 서비스의 세계로 나아간다. Nerdfeed 앱은 NSURLConnection과 NSXMLParser를 사용해 서버로부터 RSS 피드를 가져와서 해석한다. 또한 UIWebView로 웹 페이지를 표시한다.
26장에서는 UISplitViewController에 대해 배우고 아이패드의 큰 화면을 이용하기 위해 Nerdfeed 앱에 스플릿 뷰 UI를 추가한다.
27장에서는 MediaPlayer 앱을 만들면서 오디오와 비디오를 재생하는 방법을 배운다. 또한 오디오 및 비디오 리소스를 저장하는 위치, 스트리밍 한계, 저수준의 오디오 API에 대해 배운다. MediaPlayer가 백그라운드 상태로 음악을 연주할 수 있게 하면서, 백그라운드 실행을 위한 지침에 대해서도 배운다.
28장에서는 맥(Mac) 데스크톱을 위한 코코아 앱을 만든다. 네트워크에서 데스크톱 앱을 찾기 위해 봉쥬르(Bonjour)를 사용하는 iOS 앱도 만든다. 데스크톱 앱이 검색되면 HTTP를 이용해 통신한다.
29장에서는 여러분의 iOS 디바이스로 푸시 노티피케이션을 보내도록 데스크톱 앱을 확장할 것이다.
오픈소스 툴을 이용한 디지털 포렌식 (0) | 2012.01.06 |
---|---|
프로페셔널 ALM (0) | 2011.11.01 |
예제로 배우는 CUDA 프로그래밍 (0) | 2011.10.05 |
댓글 영역