• More 아이폰3 프로그래밍
  • iPhone SDK 3 집중 분석

  • 데이브 마크, 제프 라마시 지음
  • 한동균 옮김

  • 임베디드 & 모바일 시리즈_005
  • ISBN: 9788992939515
  • 35,000원 | 2010년 05월 31일 발행 | 640쪽



『시작하세요! 아이폰 3 프로그래밍』의 저자 데이브 마크와 제프 라마시가 다시 뭉쳤다. 『시작하세요! 아이폰 3 프로그래밍』의 후속작이라고 할 수 있는 『More! 아이폰 3 프로그래밍』에서는 이전 책에서 미처 다루지 못한 내용과 더불어 여러분의 애플리케이션 코드의 질을 월등히 향상시켜줄 다양한 테크닉들을 포함하고 있다. 특히 이 책의 반을 차지하고 있는 코어 데이터는 국내에 참고자료 자체가 희귀한 만큼 비단 아이폰 개발자뿐만 아니라 코코아 개발을 공부하고 싶은 개발자들에게도 좋은 자료가 될 것이다.

『More! 아이폰 3 프로그래밍』에서는 또한 애플리케이션의 단순 구현에 중점을 둔 입문서적보다 한 발 더 나아간 방법들을 소개한다. 예제 코드를 작성하더라도 단순 실행을 목적으로 하는 것이 아닌 향후 여러분의 애플리케이션에 적용 가능한 코드를 작성하며, 다양한 변화에도 유연하게 대처할 수 있는 코드작성을 목표로 설명한다.

『시작하세요! 아이폰 3 프로그래밍』으로 기초를 닦은 개발자라면 『More! 아이폰 3 프로그래밍』은 아이폰 프로그래밍 완성을 위해 꼭 읽어 볼 만한 책이다.

아이폰 개발에 관심이 있나요? 좀 더 배우길 원하나요? 『시작하세요! 아이폰 3 프로그래밍』으로, 혹은 여러분 스스로 아이폰 개발을 공부하고 있다면 이 책은 여러분에게 많은 도움을 줄 것입니다.

『More! 아이폰 3 프로그래밍』에서는 코어 데이터, GameKit을 이용한 P2P 네트워킹, 웹에 있는 데이터 활용하기, MapKit, 애플리케이션에서의 이메일 사용과 같은 애플의 최신 API를 베스트셀러 작가인 데이브 마크와 제프 라마시의 설명으로 풀어냈습니다. 또한 이 책에 사용된 모든 개념과 API는 모두 여러분의 애플리케이션에 바로 적용할 수 있습니다.

『More! 아이폰 3 프로그래밍』은 코어 데이터와 애플의 아이폰 영속화에 대한 새로운 표준과 같이 『시작하세요! 아이폰 3 프로그래밍』에서는 다루지 않은 부분을 다루고 있습니다. 제프와 데이브는 여러분을 대규모의 전문적인 애플리케이션을 제작하는 테크닉을 포함한, 코어 데이터의 핵심 개념의 세계로 인도할 것입니다.

코어 데이터에 대한 설명만으로도 이 책은 충분한 가치가 있지만 그 외에도 더 많은 내용을 담고 있습니다. 예를 들어 상당히 단순한 GameKit의 블루투스 피어-투-피어 모델 및 Bonjour와 웹에 있는 파일로부터 정보를 가져오는 네트워크 스트림 등의 다양한 네트워킹 메커니즘을 다루고 있습니다. 이뿐만 아니라 데이브와 제프는 동시성 프로그래밍과 디버깅 테크닉과 같은 진보된 주제에 대해서도 설명할 것입니다.

『More! 아이폰 3 프로그래밍』에서 소개하는 기술들을 마스터하기 전까지는 아이폰 앱 개발을 마스터했다고 할 수 없을 것입니다.

 

추천사

"같은 저자에 의해 작성된 시작하세요! 아이폰 3 프로그래밍을 읽은 독자라면 저자들이 단순히 지식을 알고 있을 뿐만 아니라 그들의 지식을 잘 전달하고 있음을 알고 있을 것이다. 이 책도 다를것이 없다. 나는 특히 이 책의 코어 데이터 부분이 맘에든다. 간단한 소개 뒤에 저자들은 코어 데이터를 파고든다. 코어 데이터에 대한 설명은 명확하며, 예제들은 따라하기 쉽다. 비록 아이폰 SDK가 많은 수의 프레임워크를 갖고 있지만 저자들은 가장 유용하며 자주 사용할 프레임워크들만 적절히 잘 선택하여 이 책에 담고 있다."

-- 바트 제이콥스, Bart Jacobs

"이 책은 정말 좋은 책이다. 특히 코어 데이터에 대한 부분이 대단한다. 코어 데이터의 마이그레이션이나 유효성 검사에 대해 다룬 책을 본적이 없지만 이 책에서는 이 부분에 대해 자세히 다루고 있다."

-- 다렌 스트록스, Darren Strokes

"이 책은 코어 데이터와 아이폰에 대한 혼란을 해결하기 위해 내가 기다려온 책이다. 아직 이 책을 전부 읽지는 않았지만, 모든 설명이 깔끔하게 잘 되어 있고 내가 진행중인 아이폰 프로젝트에도 도움이 될 듯하다. 시작하세요! 아이폰 3 프로그래밍도 좋은 책이였지만 이 책과 이전책을 함께 했을때 어마어마한 시너지 효과를 만들어 낸다. 이 책을 진심으로 추천하는 바이다."

-- 필립 포치, Phillip Proch

데이브 마크(Dave Mark)

데이브 마크(Dave Mark)는 오랫동안 맥 기반 소프트웨어 개발자로 활동해 왔으며, 『Learn C on the Mac 』(Apress 2009), The Macintosh Programming Primer 시리즈(Addison-Wesley 1992)와 『Ultimate Mac Programming』(Wiley 1995)를 포함한 다수의 맥 개발 서적을 집필한 바 있다. 데이브는 수영을 굉장히 좋아해서, 가급적이면 물가를 떠나지 않으려 고 한다. 부인과 세 아이와 함께 버지니아에 살고 있다.

 

제프 라마시(Jeff LaMarche)

제프 라마시(Jeff LaMarche)는 오랫동안 맥 개발자이자 공인된 애플 아이폰 개발자로서 활동하고 있으며 20여 년이 넘는 프로그래밍경력을 지니고 있다. 제프는 맥테크(MacTech) 잡지와 애플의 개발자 기술지원 서비스 사이트(Apple’s Developer Technical Services)에도 코코아(Cocoa)와 오브젝티브C(Objective-C)에 관련한 기사를 기고하고 있다. 90년대 후반에 피플소프트(PeopleSoft)에서 기업용 소프트웨어 개발자로 일했고, 그 후에는 줄곧 독립 컨설턴트로 활동해왔다.

한동균

제주대학교 컴퓨터공학과 학부를 졸업하고 2010년 09월 부터 홍콩과학기술대학교(HKUST) 컴퓨터공학과에 석사과정으로 진학예정이다. “제주소년의 잡다한 이야기들”이란 블로그(http://blog.handkstory.net)에서 IT와 일상생활에 대한 이야기를 나누고 있다.

 

옮긴이 글

2009년 11월말. 드디어 국내에 아이폰이 도입되었습니다. 많은 사람들이 아이폰에 열광하였고, 4개월 만에 50만대가 판매되며 하루가 다르게 우리나라의 많은 부분을 바꿔 놓았습니다. 많은 사람들이 더 이상 버스를 타기 위해 추위에 벌벌 떨지 않아도 되었으며, 낯선 곳에서도 아이폰의 지도 어플을 통해 더 이상 길을 헤매지 않게 되었습니다.

아이폰의 성공에는 앱스토어라는 새로운 생태계의 힘이 컸습니다. 사람들은 아이폰이란 캔버스 위에 앱스토어에서 구매한 다양한 앱으로 자신만의 그림을 그려나갈 수 있는 매력에 매료되어 아이폰을 사용하였고 주변의 지인들에게도 권하기 시작하였습니다.

아이폰이란 텅빈 캔버스가 있고 이 책을 읽고 계신 여러분은 이 텅빈 캔버스를 마음대로 채워 넣을 수 있는 화가들입니다. 『시작하세요! 아이폰 3 프로그래밍』을 통해서 그림의 기본기를 터득하신 분들도 있을 것이고, 이미 많은 그림을 그려보신 분들도 있을 것입니다.

『시작하세요! 아이폰 3 프로그래밍』이 전반적으로 API의 사용 방법에 집중했다면 이 책에서는 좀더 우아한 방법으로 코드의 중복을 막고 유지보수하기 쉬운 방법으로 API를 사용하는 방법까지 고려하였습니다. 이런 방식의 사고는 학습하기 까다로울지 모르지만 한번 학습하고 나면 비단 아이폰 개발만이 아니라 다른 언어를 갖고 개발할 때도 여러분이 작성하는 코드의 질을 향상시켜 줄 것입니다.

  • 01장 다시 시작하기
    • 이 책에 대해
    • 알아야 할 것들
    • 시작하기 전에 준비해 두어야 하는 것들
    • 이 책의 구성
    • 준비 되었는가?
    •  
  • 제1부 코어 데이터
    • 02장 코어 데이터의 구조
      • 코어 데이터의 간략한 역사
      • 코어 데이터 애플리케이션 만들기
      • 코어 데이터의 개념과 용어
      • 데이터 모델과 영구 저장소
        • 데이터 모델 클래스 : NSManagedObjectModel
        • 영구 저장소와 영구 저장소 코디네이터
        • 데이터 모델 돌아보기
      • 엔터티와 데이터 모델 에디터
        • 엔터티
        • 프로퍼티
      • 관리 객체
        • 키-값 코딩
        • 관리 객체 컨텍스트
        • 종료 시 저장
      • 영구 저장소에서 데이터 불러오기
      • 페치 결과 컨트롤러
        • 페치 결과 컨트롤러 만들기
        • 페치 결과 컨트롤러 델리게이트 메서드
        • 페치 결과 컨트롤러로부터 관리 객체 검색
        • 새로운 관리 객체의 생성과 삽입
        • 관리 객체 삭제
      • 모든 것이 갖추어졌다
      •  
    • 03장 슈퍼 스타트: 데이터 추가, 표현, 삭제
      • Xcode 프로젝트 설정
        • 애플리케이션 구조
        • 애플리케이션 델리게이트 인터페이스 수정하기
        • 애플리케이션 델리게이트 구현하기
      • 테이블 뷰 컨트롤러 생성하기
      • MainWindow.xib 설정하기
        • 아웃렛에 연결하기
      • 데이터 모델 디자인하기
        • 엔터티 추가하기
        • 새로운 엔터티 수정하기
        • 새로운 엔터티에 속성 추가하기
        • Name 속성 추가하기
        • 속성 수정하기
      • HeroListViewController 생성하기
        • 페치 결과 컨트롤러 선언하기
        • 프로젝트에 두 개의 아이콘을 끌어다 놓자
        • HeroListViewController 인터페이스를 디자인하자
        • 영웅 뷰 컨트롤러 구현하기
      • 실행해보자
      • 다 됐지만 아직 끝난 건 아니다.
      •  
    • 04장 디테일 뷰의 악마
      • 테이블 기반 vs Nib 기반의 디테일 뷰
      • 디테일 편집 뷰에 도전하기
      • 배열로 테이블 구조 제어하기
      • 쌍배열
        • 중첩배열
        • 쌍 중첩배열
        • 테이블 구조를 배열로 표현하기
        • 중첩배열, 명확히 말하면
        • SuperDB 프로젝트 업데이트하기
      • 속성의 형식 정하기
      • 디테일 뷰 컨트롤러 생성하기
        • 인스턴스 변수와 프로퍼티 선언하기
        • 보여주기 기능 구현하기
        • 새로운 컨트롤러 사용하기
        • 뷰 기능 시험하기
      • 편집 보조 컨트롤러 추가하기
        • 상위 클래스 생성하기
        • 문자열 속성 에디터 생성하기
        • 날짜 속성 에티터 생성하기
        • 속성 에디터 사용하기
      • 섹션 리스트 구현하기
        • 일반적인 셀렉션 리스트 컨트롤러 생성하기
      • 악마의 최후
      •  
    • 05장 변화를 준비하자: 마이그레이션과 버전 관리
      • 데이터 모델에 관하여
        • 데이터 모델이 컴파일되다
        • 데이터 모델은 여러 개의 버전을 가질 수 있다.
        • 데이터 모델 버전 식별자
        • 버전이 할당된 데이터 모델 사용하기
      • 마이그레이션
        • 경량 vs 표준
        • 표준 마이그레이션
        • 경량 마이그레이션을 사용하기 위해 앱 설정하기
      • 이동할 시간
      •  
    • 06장 커스텀 관리 객체
      • 데이터 모델 업데이트하기
        • 나이 속성 추가하기
        • 선호 색 속성 추가하기
        • 이름 속성에 최소 길이 추가하기
      • Hero 클래스 생성하기
      • Hero 헤더 수정하기
      • 기본값 할당하기
      • 유효성 검사
        • 한 속성에 대한 유효성 검사
        • 여러 속성에 대한 유효성 검사
      • 가상 접근자
      • 유효성 검사 피드백 추가하기
        • ManagedObjectAttributeEditor 헤더 파일 업데이트하기
        • ManagedObjectAttributeEditor 구현 파일 업데이트하기
        • 하위 클래스에서 유효성 검사를 사용하도록 업데이트하기
      • 값 변환기 생성하기
      • 색 속성 에디터 생성하기
      • 영웅 편집 컨트롤러에 새로운 속성 표시하기
      • 표시 문제
      • 영웅 편집 컨트롤러에서 특정 행을 표시만 하기
        • 펼쳐보기 지시자 숨기기
        • 읽기전용 속성에 대한 탭 다루기
      • 우리를 물들여 가다
      •  
    • 07장 관계, 페치드 프로퍼티, 그리고 표현
      • 애플리케이션 확장하기: 초능력과 보고서
      • 관계
        • 일대일 관계
        • 일대다 관계
        • 역관계
        • 삭제 규칙
      • 페치드 프로퍼티
      • 관계와 페치드 프로퍼티를 데이터 모델 에디터에서 생성하기
        • Power 엔터티 추가하기
        • Powers 관계 생성하기
        • 역관계 생성하기
        • olderHeroes 페치드 프로퍼티 생성하기
        • youngerHeroes 페치드 프로퍼티 생성하기
        • sameSexHeroes 페치드 프로퍼티 생성하기
        • oppositeSexHeroes 페치드 프로퍼티 생성하기
      • 관계와 페치드 프로퍼티를 Hero 클래스에 추가하기
      • 리팩터링
        • 클래스 이름 바꾸기
        • 영웅 인스턴스 변수 리팩터링하기
        • 배열 제거하기
        • 저장하기와 취소하기 버튼 제공하기
        • 일대다 관계 지원하기
      • 새로운 일반화된 컨트롤 사용하기
        • 영웅과 초능력을 위한 팩토리 메서드 추가하기
        • Nib 인스턴스 삭제하기
        • HeroListController 업데이트하기
      • 페치드 프로퍼티 속성 컨트롤러 생성하기
      • 삭제된 객체 정리하기
      • 멋진 코어 데이터
      •  
  • 2부 더 멀리 탐험해보자
    • 08장 더 멀리 탐험하기
      • 예제 애플리케이션
      • 네트워크 통신 모델
        • 클라이언트-서버 모델
        • 피어-투-피어 모델
        • 하이브리드 클라이언트-서버 / 피어-투-피어
      • GameKit 세션
        • 세션 생성하기
        • 다른 세션을 찾아 연결하기
        • 다른 세션 수신하기
        • 피어로 데이터 전송하기
        • 정보를 전송하기 위해 패키지로 만들기
        • 피어로부터 데이터 수신하기
        • 연결 닫기
      • 피어 피커
        • 피어 피커 생성하기
        • 피어 연결 다루기
        • 세션 생성하기
      • 프로젝트 생성하기
        • 유휴 타이머 끄기
        • GameKit 프레임워크 임포트하기
        • 인터페이스 수정하기
      • 실행해 보자
      • 게임을 실행하자!
      •  
    • 09장 온라인 플레이: Bonjour와 네트워크 스트림
      • 예제 애플리케이션
      • 전반적인 과정
      • 리스너 구성하기
        • 콜백 함수와 런 루프 통합
        • 소켓 설정하기
        • 대기 포트 정하기
        • 런 루프에 소켓 등록하기
        • 소켓 콜백 함수 구현하기
        • 리스너 멈추기
      • Bonjour
        • 공개 서비스 만들기
        • 발행된 Bonjour 서비스 찾기
        • 브라우저 델리게이트 메서드
        • 발견된 서비스 분석하기
      • 스트림
        • 스트림 열기
        • 스트림과 스트림의 델리게이트
        • 스트림에서 데이터 받기
        • 스트림을 통해 데이터 전송하기
      • 종합하기
      • 온라인 플레이를 위해 틱택토 수정하기
        • 패킷 카테고리 추가하기
        • 온라인 세션 객체 구현하기
        • 리스너 객체 생성하기
        • 피어 브라우저 생성하기
        • 온라인 플레이 지원을 위해 TicTacToeViewController 업데이트하기
      • 즐겨보자
      •  
    • 10장 웹에 있는 데이터 사용하기
      • 애플리케이션 뼈대 구성하기
        • 액션과 아웃렛 선언하기
        • 인터페이스 설계하기
        • 원형 구현하기
      • Foundation 객체를 사용하여 데이터 가져오기
      • 데이터를 동기적으로 가져오기
        • URL 요청
      • 비동기적으로 데이터 가져오기
        • NSURLConnection 델리게이트 메서드
        • WebWork에 비동기 데이터 수신 추가하기
      • 요청 타입과 폼 매개변수
        • HTTP 요청 타입 명시하기
        • 폼 매개변수
        • RequestTypes 애플리케이션 만들기
      • HTTP 404 - 결론을 찾을 수 없습니다.
      •  
    • 11장 MapKit
      • 예제 애플리케이션
      • 개요와 용어정리
      • 맵뷰
        • 맵 종류
        • 사용자 위치
        • 좌표 지역
        • 표시할 지역 설정하기
        • 맵뷰 델리게이트
      • 주석
        • 주석 객체
        • 주석 뷰
        • 주석 추가와 제거
        • 주석 선택하기
        • 맵뷰에 주석 뷰 제공하기
      • 리버스 지오코딩
      • MapMe 애플리케이션 만들기
        • 아웃렛과 액션 선언하기
        • 인터페이스 만들기
        • 주석 객체 클래스 작성하기
        • MapMeViewController 구현하기
        • MapKit과 코어 로케이션 프레임워크 연결하기
      • 동쪽으로 가라, 젊은 프로그래머들이여
      •  
    • 12장 메일 보내기
      • 예제 애플리케이션
      • MessageUI 프레임워크
        • 메일 작성 뷰 컨트롤러 생성하기
        • 제목 미리 설정하기
        • 수신자 미리 설정하기
        • 본문 설정하기
        • 첨부파일 추가하기
        • 메일 작성 뷰 보여주기
        • 메일 작성 뷰 컨트롤러 델리게이트 메서드
      • MailPic 애플리케이션 만들기
        • 아웃렛과 액션 선언하기
        • 사용자 인터페이스 만들기
        • 뷰 컨트롤러 구현하기
        • MessageUI 프레임워크 연결하기
      • 메일을 보내자
      •  
    • 13장 아이팟 라이브러리 접근
      • 예제 애플리케이션
      • 아이팟 라이브러리 사용하기
        • 미디어 아이템
        • 미디어 아이템 컬렉션
        • 미디어 쿼리와 미디어 프로퍼티 술어
        • 미디어 피커 컨트롤러
        • 뮤직 플레이어 컨트롤러
      • 간단한 재생기 애플리케이션 만들기
        • 미디어 아이템 컬렉션 기능 추가하기
        • 아웃렛과 액션 선언하기
        • 사용자 인터페이스 만들기
        • 심플 플레이어 뷰 컨트롤러 구현하기
        • 심플 플레이어를 실행해 보자
      • 그만! 거친 바다로 가자!
      •  
    • 14장 인터페이스가 항상 반응하게 만들기
      • 동시성 문제 탐구하기
      • Stalled 애플리케이션 생성하기
        • 액션과 아웃렛 선언하기
        • 인터페이스 디자인하기
        • Stalled 뷰 컨트롤러 구현하기
      • 타이머
        • 타이머 생성하기
        • 타이머 정지하기
        • 타이머의 한계
      • Stalled에 타이머 추가하기
        • 배치 객체 만들기
        • 컨트롤러 헤더 업데이트하기
        • nib 업데이트하기
        • 뷰 컨트롤러 구현 업데이트하기
      • 오퍼레이션 큐 & 동시성
        • 스레드
        • 오퍼레이션
        • 오퍼레이션 큐
      • Stalled 애플리케이션에 오퍼레이션 큐 추가하기
        • SquareRootApplication 생성하기
        • StalledViewController.h 변경하기
        • 사용자 인터페이스 수정하기
      • StalledViewController.m 업데이트하기
      • 큐에 넣자
      •  
    • 15장 디버깅
      • 디버거
        • 브레이크 포인트
        • GDB 콘솔
      • 정적 분석
      • 특정 버그
        • 메모리 오버릴리즈하기
        • 무한 반복
        • 놓친 아웃렛과 액션 커넥션들
      • GDB: 결론 단락에서 멈추다
      •  
    • 16장 끝없이 이어지는 길
      • 잠시 떨어져서 바라보자
        • 애플의 문서
        • 메일링 리스트
        • 토론 포럼
        • 웹사이트
        • 블로그
      • 작별 인사

예제코드 관련 GitHub 페이지

관련 글