[효율적인 데이터 관리를 위한]
iOS 코어 데이터
- 원서명Core Data for iOS: Developing Data-Driven Applications for the iPad, iPhone, and iPod touch (ISBN 9780321670427)
- 지은이팀 이스테드, 톰 해링턴
- 옮긴이정승원
- ISBN : 9788960776104
- 30,000원
- 2014년 09월 30일 펴냄 (절판)
- 페이퍼백 | 408쪽 | 188*235mm
- 시리즈 : 모바일 프로그래밍
판매처
- 현재 이 도서는 구매할 수 없습니다.
책 소개
요약
아이폰, 아이패드에서 데이터를 관리할 때는 속도, 안정성, CPU 부하, 배터리 소모 등 많은 부분을 고려해야 한다. SQL이나 파일 등 데이터를 관리하는 방법이 많지만, 그중에서도 애플이 직접 제공하는 데이터 관리 레이어 ‘코어 데이터’를 사용하면 앞에 열거한 모든 목적을 쉽게 달성할 수 있다. 개발자는 데이터 관리라는 본질에만 집중하면 된다. 경험 많은 iOS 개발자 두 명이 코어 데이터를 효과적으로 다루는 방법을 설명하는 이 책을 통해 코어 데이터를 정복하기 위한 첫걸음을 내딛을 수 있다.
이 책에서 다루는 내용
코어 데이터의 기능, 클래스, 상호 작용 이해
MVC 기반 iOS 앱 개발에 코어 데이터를 사용하는 방법
관계형 데이터를 객체 모델에 매핑하고, 엑스코드 4 데이터 모델러에서 빌드하는 방법
관리 객체를 다루는 방법과 UITableView에 표시하는 방법
프리디케이트를 생성해 숫자, 데이터, 객체에 매칭하는 방법
앱의 데이터 모델 버전 간 호환성 유지
뷰 콘트롤러 간 관리 객체 콘텍스트 추적
코어 데이터의 자동 실행 취소 기능
추상 엔티티, 엔티티 상속, 다중 뷰 콘트롤러를 사용한 앱 개발
iOS 디바이스의 한정적 메모리를 위한 최적화
일반적인 코어 데이터 문제점 분석과 해결
이 책의 대상 독자
이 책은 중급에서 고급 iOS 개발자에 초점을 맞추며, 독자가 iOS 애플리케이션 프로그래밍 지식이 어느 정도 있을 것이라 가정한다. 특히 애플의 기본개발 도구(엑스코드), 오브젝티브C 언어, 코코아 터치(Cocoa Touch) 프레임워크를 사용하는 데 어려움을 느끼지 않아야 한다. 이 책에 포함된 대부분의 정보는 iOS 디바이스와 맥 OS X(10.4 이상)에 모두 적용되는 일반적인 코어 데이터를 다루지만, 데스크탑 환경에서 코어 데이터를 다뤄본 적이 있다는 가정은 하지 않는다. iOS에서 코어 데이터를 무리 없이 사용할 수 있게 되면, 동일한 도구(엑스코드의 데이터 모델러)와 거의 비슷한 코드(NSFetchedResultsController는 iOS 전용이다)로 데스크탑용 코어 데이터 애플리케이션을 만들 수 있다. iOS 애플리케이션을 개발한다면 데이터를 보존해야 할 필요가 있을 것이다. 매우 단순한 데이터 저장 이상의 기능이 필요한 경우에 파일 기반이나 로우 레벨 SQLite 기반 저장 레이어를 직접 만드는 것보다는 코어 데이터를 사용하는 편이 쉽다. 코어 데이터로 작업해야 한다면 이 책을 읽어야 한다. 코어 데이터를 사용해본 적이 없다면 이 책을 통해서 어디서부터 시작해야 할지 배우게 된다. 프레임워크의기본과 iOS에만 있는 NSFetchedResultsController를 마치고, 코어 데이터 기반 애플리케이션을 만들어보고 나서 성능 관련 팁과 문제 해결 방법을 배운다. 코어 데이터를 사용해본 경험이 있고, 많은 모델 객체를 사용할 때 도무지 앱이 죽는 이유를 모르겠다거나, 특정 상황에서 성능 문제가 왜 생기는지 알고 싶을 때 이 책에서 해답을 얻을 수 있다. 이 책은 프레임 워크의 기본 사항에서 발생하는 문제를 명확히 설명하고, 이런 문제를 해결하는 데 애플의 개발 도구를 사용하는 방법을 알려준다.
이 책의 구성
이 책은 애플의 코어 데이터 프레임워크를 iOS 디바이스에 사용하는 방법을 포괄적으로 다룬다. 기초적인 내용부터 시작해 고급 기술을 배우고, 실제로 사용되는 예제를 알아본다. 이 책의 많은 장은 두 부분으로 나뉜다. 관련정보를 배우는 것으로 시작하고, 샘플 프로젝트를 통해 앞에서 배운 내용을 확인한다. 10장에서는, 코어 데이터에 기반을 둔 메모 애플리케이션을 처음부터 끝까지 만들어본다. 코어 데이터가 어떤 일들을 하는지 당장 궁금하다면 10장에서 읽기를 시작한 후 처음으로 돌아오는 것도 좋다.
1부, 소개 애플의 코어 데이터 프레임워크는 애플리케이션 데이터를 저장하기 위한 강력하고 통합된 솔루션이다. 이 책은 아이폰 SDK 3.0 이상 버전의 iOS에서 이 프레임워크를 사용하는 방법과 포괄적인 레퍼런스를 제공한다. 코어 데이터 기본뿐 아니라 객체 모델링과 데이터 저장, 엑스코드의 데이터 모델링 도구를 사용해 객체 모델을 만드는 방법 등도 배운다.
1장, iOS 디바이스 코어 데이터 개요 1장은 iOS 애플리케이션 개발을 위한 MVC 패턴으로서의 코어 데이터를 소개한다. 웹 개발을 위한 엔터프라이즈 객체 프레임워크(Enterprise Objects Framework)로서 코어 데이터의 간략한 역사와 코어 데이터가 유용한 이유를 알아본다. 코어 데이터를 데스크탑에 사용하는 것과 iOS에 사용하는 것에 차이점이 크지 않은 이유와 iOS의 바인딩(Binding) 지원이 부족한 점도 배운다. 코어 데이터를 사용해 현재 공개돼 있는 iOS 애플리케이션을 열거하는 것으로 개요를 마친다. 머니웰(MoneyWell), Calcuccino, 어소시에이티드 프레스(Associated Press) 애플리케이션을 여기서 소개한다.
2장, 코어 데이터 기초 1장을 통해 코어 데이터의 개요를 충분히 습득했으니 2장에서는 코어 데이터의 더 깊숙한 부분까지 들어가 주요 기능을 알아본다. 관리 객체 콘텍스트와 관리 객체의 상호 작용과 영구 저장(Persistent Store)을 여기서 배운다. 또한 프레임워크 클래스를 소개하고, 대개 기본 프레임워크 클래스를 상속받을 필요 없이 매우 적은 코드로 구현할 수 있는 훌륭한 기능을 설명한다. 뒤이어 코어 데이터를 사용해 애플리케이션을 작성하는 과정을 설명한다. 애플의 코어 데이터 iOS 애플리케이션용 엑스코드 템플릿 프로젝트가 어떻게 동작하는지 알아보며 2장을 마친다.
3장, 데이터 모델링 3장에서는 데이터 모델링의 기본적인 내용을 소개한다. 코어 데이터가 데이터베이스 자체가 아니라는 점을 수차례 강조했다. 대신 관계형 데이터베이스 기술(예를 들어 객체 모델 디자인에 적용되는 데이터 정규화)에 대해 설명한다. 또한 관계형 데이터베이스에 저장된 데이터를 객체지향 프로그래밍에 사용할 수 있도록 관계형 객체 모델에 어떻게 매핑되는지 알아보고, 엑스코드의 데이터 모델 에디터(Data Model Editor)를 사용해 코어 데이터에 객체 모델이 정의되는 방법을 소개하며 3장을 마친다.
2부, 코어 데이터로 작업 2부에서는 iOS에 코어 데이터를 활용하길 원하는 애플리케이션에 적용되는 주제에 대해 집중적으로 다룬다. 프레임워크의 각 측면이나 관련 기술은 개별적인 장으로 나눴으므로, 순서대로 읽어가며 점진적으로 습득할 수도 있고, 관심 있는 주제를 골라서 읽을 수도 있다. 각 장은 두 부분으로 구분된다. 처음에는 특정 기능을 소개하고, 왜, 그리고 언제 이 기능이 유용한지 알려준다. 두 번째 부분에서는 관련 클래스와 메소드를 소개한다. 더 복잡한 기능을 만들기 이전에 간단한 애플리케이션에 기본적인 기능을 추가하는 튜토리얼 형식을 취한다. 튜토리얼 섹션은 실습을 통해 배울 수 있게 하는 것이 목적이지만, 이런 방법을 통해 독자 스스로 애플리케이션을 개발할 때 동일한 기술을 사용하는 데 어려움을 느끼지 않게 된다.
4장, 기본적인 저장과 불러오기 UITableView로 관리 객체를 표시하는 간단한 아이폰 애플리케이션을 만드는 과정을 보여준다. 관리 객체 콘텍스트가 무엇인지, 그리고 기반데이터와 어떻게 연결되는지 배운다. 코어 데이터를 효율적으로 사용하는 데 관리 객체 콘텍스트가 필수적인 이유를 이해하게 된다. 콘텍스트가 무엇인지, 어떻게 사용하는지, 콘텍스트가 어디에서 ‘왔는지’와 서로 상호 작용하는 방법도 배운다. 4장의 샘플 프로젝트는 간단한 추가(Add) 버튼으로 불러온 객체를 추가하고 테이블 뷰에 추가한다. 개발의 용이함을 위해 모든 객체는 임의로 생성된 정보와 함께 미리 생성돼있다.
5장, NSFetchedResultsController 사용 iOS에만 있는 객체인 불러오기 결과 컨트롤러(Fetched Results Controller)를 활용해서 데이터를 불러오고 테이블 뷰에 객체를 표시하는 방법을 배운다. 또한 iOS에서 메모리 관리가 중요한 이유와 NSFetchedResultsController가 어떻게 메모리 내부에 최소한의 객체를 자동으로 유지하는지도 알아본다.
6장, 관리 객체로 작업 데이터 검증 같은 NSManagedObject가 제공하는 기능을 소개한다. 대개 NSManagedObject를 서브클래싱할 필요는 없지만, 6장은 왜, 그리고 언제 그렇게 해야 하는지 설명한다. 관리 객체의 라이프 사이클을 배우고 모델링한 속성의 서로 다른 타입을 알아본다. 또한 접근자 메소드 코드를 간단히 하는 오브젝티브C 2.0의 기능을 다루고, 사용자 정의 검증 로직을 살펴보며 설명을 마친다.
7장, 프리디케이트로 작업 NSPredicate 생성의 기본부터 시작하며, 간단한 프리디케이트(predicate) 형식문자열에 대해 알아본다. 숫자나 날짜 같은 스칼라 값과 매칭하는 데 프리디케이트를 사용하는 방법과, 특정 부서에서 일하는 사원을 추출할 때 같이 특정 관계의 객체에 매칭하는 방법을 배운다. 특히 대소문자를 구별하는 정보를 포함하는 문자열과 작업하는 내용을 다룬 절이있고, SQLite 저장소에 쿼리하기 위해 코어 데이터가 생성하는 로(raw) SQL문을 조사하는 방법을 살펴본다.
8장, 데이터 이전과 버전 관리 구 버전과 신 버전 애플리케이션의 데이터 모델 간 호환성을 지키기 위한 버전, 데이터 이전 기능을 다룬다. 기본적으로 새로운 버전의 모델을 사용해 만든 애플리케이션은 구 버전의 모델을 열 수 없지만, 데이터 자동 이전을 사용하면 업그레이드 이후 시점에서도 기존 자료를 계속해서 사용할 수 있다. 코어 데이터 프레임워크가 데이터 모델 버전을 다른 것에 관련지어 주는 간단한 데이터 이전과, 매핑 모델과 엔티티 이전 정책을 사용해서 직접 데이터를 이전하는 방법을 배운다.
9장, 다중 뷰 컨트롤러와 실행 취소 최대한 간단한 예제를 제공하기 위해 이전 장까지 살펴본 모든 프로젝트는 단일 뷰 컨트롤러를 사용했다. 9장에서는 다중 뷰 컨트롤러에서 관리 객체 콘텍스트를 추적하는 방법과, 수정 뷰 컨트롤러(editting view controller)를 사용해 기존 관리 객체의 값을 바꾸는 방법을 알아본다. 또한 여러 개의 관리 객체 콘텍스트를 사용하는 방법과, 여러 콘텍스트에서 관리 객체를 참조하는 방법도 배운다. 그 후에는 코어 데이터가 제공하는 자동 실행 취소(Undo) 기능이 얼마나 사용하기 쉬운지 알아본다.
3부, 간단한 코어 데이터 애플리케이션 제작 3부에서는 코어 데이터를 사용해서 완전한 애플리케이션을 만드는 과정을 독자에게 보여준다.
10장, 샘플 애플리케이션: Note Collector 지금까지 배운 코어 데이터 지식을 활용해서 지금까지 만들었던 애플리케이션보다 더 안정성 높은 애플리케이션을 만들어본다. 추상 엔티티와 엔티티 상속, 다중 뷰 컨트롤러를 사용해서 노트를 기록하고 콜렉션에 정리하는 메모 애플리케이션을 만드는 과정을 보여준다. 로(raw) SQLite 파일을 조사해서 코어 데이터가 어떤 작업을 수행 중인지 살펴보는 방법을 배우고, 사용자가 애플리케이션을 처음으로 실행했을 때 샘플 데이터를 볼 수 있게 미래 생성해둔 데이터를 포함시키는 방법을 알아본다. 또한 실행 시 애플리케이션 상태를 유지하는 방법을 알아보는데, 이 과정을 통해 뷰 컨트롤러의 내비게이션 기반 스택을 재생성하기 위한 관리 객체 정보를 얻는 방법을 배운다.
4부, 최적화와 문제 해결 4부에서는 성능 관련 이슈를 다룬다. iOS 디바이스의 제한적인 메모리를 최적화하는 방법과, iOS 코어 데이터 개발 도구를 사용해 디버깅하는 방법을 배운다.
11장, iOS 성능 최적화와 메모리 요구 사항 성능, 최적화, 속도에 관련된 이야기를 한다. 애플리케이션의 실행 속도를 높이는 방법과, 사용 가능한 모든 메모리를 소비하거나 배터리 소모를 높이지 않으면서도 사용자의 동작에 즉각적으로 반응하는 애플리케이션을 만드는 몇 가지 간단한 요령을 배운다. 코어 데이터와 직접적으로 관련이 있지는 않지만, 11장은 독자가 리테인 카운트(retain count)와 객체가 해제되는 시점에 대해 잘 이해하고 있다고 가정한다.
12장, 코어 데이터 문제 해결 코어 데이터를 사용하는 도중 문제가 발생하면 해당 증상이나 에러 메시지를 이해하기 쉽지 않다. 어떤 부분이 잘못됐는지 이해하지 못한다면 코드를 수정하기란 불가능에 가깝다. 12장에서는 코어 데이터를 사용할 때 가장 빈번히 발생하는 문제를 진단하고 해결하는 방법을 알아본다. 코어 데이터 자체가 아닌 다른 부분이 문제를 야기할 수도 있다는 점을 기억해야 한다. 예를 들어 메모리 관리 에러는 어떤 코코아객체에든 영향을 줄 수 있고, 관리 객체도 예외가 아니다. 하지만 12장은 코어 데이터에 관련 있는 문제에만 집중한다.
목차
목차
- I부 소개
- 1장 iOS 코어 데이터 개요
- 역사
- 코어 데이터의 탄생
- iOS에서 코어 데이터를 사용해야 하는 이유
- 관계 관리
- 관리 객체와 데이터 검증
- 실행 취소와 상태 관리
- iOS와 데스크탑의 차이점
- 불러오기 결과 컨트롤러
- 코어 데이터 사례 연구
- 아이폰용 머니웰
- Calcuccino
- 어소시에이티드 프레스
- 역사
- 2장 코어 데이터 기초
- 디스크에 객체 기록
- 코어 데이터 방식
- 엔티티와 관리 객체
- 관계
- 관리 객체 콘텍스트
- 객체 불러오기
- 폴팅과 유니큐잉
- 영구 저장소와 영구 저장소 코디네이터
- 엑스코드 코어 데이터 템플릿
- 내비게이션 기반 프로젝트 테플릿
- 데이터 모델러
- 코어 데이터 스택 설정
- 애플리케이션 실행
- RootViewContoller 코드
- 정리
- 3장 데이터 모델링
- 관리 객체와 엔티티
- 데이터를 엔티티로 나누기
- 모델-객체 용어에서의 코어 데이터
- 데이터 정규화
- 바이너리 데이터 저장
- 엑스코드 데이터 모델러 다루기
- 엔티티 작성
- 프로퍼티 작성
- 관계 작성
- 정리
- II부 코어 데이터로 작업
- 4장 기본적인 저장과 불러오기
- 새 관리 객체 작성
- 콘텍스트 저장
- 저장된 관리 객체 불러오기
- 관리 객체 삭제
- 테이블 뷰 작업
- Random Dates 애플리케이션 프로젝트
- Random Dates 데이터 모델
- 기본 RootViewController 동작
- 임의의 날짜 객체 불러오기
- RandomDate 객체 표시
- RandomDate 객체 삭제
- 커스텀 관리 객체 서브클래스
- 관리 객체를 위한 커스텀 클래스 생성과 설정
- 정리
- 새 관리 객체 작성
- 5장 NSFetchedResultsController 사용
- NSFetchedResultsController 소개
- NSFetchedResultsController 생성
- 테이블 뷰에 정보 공급
- 열과 섹션의 수
- 인덱스 경로의 셀 반환
- 섹션 정보 반환
- 기반 데이터 변화 처리
- 정보 캐싱
- Random Dates 애플리케이션에 NSFetchedResultsController 사용
- NSFetchedResultsController 서브클래스
- 정리
- 6장 관리 객체로 작업
- 기본 관리 객체 서브클래스 파일
- Random People 프로젝트 생성
- 관리 객체 클래스 인터페이스
- 관리 객체 클래스 구현
- Random People 애플리케이션 환경 설정
- 정보 표기
- 데이터 검증
- 개별 프로퍼티 검증
- 다른 프로퍼티에 기반을 둔 검증
- 삭제 전 검증
- Random People 애플리케이션 수정
- 일시적 속성으로 작업
- 데이터 모델 수정
- AWPerson 인터페이스와 구현에 추가
- 일시적 프로퍼티용 게터 메소드 추가
- 일시적 프로퍼티용 세터 메소드 추가
- UIColor 프로퍼티 사용
- 변형 가능한 속성으로 작업
- 관리 객체 라이프 사이클
- 비지속 프로퍼티 초기화
- 정리
- 기본 관리 객체 서브클래스 파일
- 7장 프리디케이트로 작업
- 프리디케이트 기본
- 서식 문자열을 사용한 프리디케이트 작성
- 프리디케이트 변수
- 프리디케이트 비교 연산자
- 키 경로
- 문자열 비교
- 복합 프리디케이트
- NSCompoundPredicate
- 집합과 관계
- SQL 쿼리 조사
- 검색 창 컨트롤러 추가
- 불러오기 프리디케이트 설정
- 검색 프리디케이트 수정
- 검색 스코프 바 필터 추가
- 정리
- 프리디케이트 기본
- 8장 데이터 이전과 버전 관리
- 데이터 이전 문제
- 데이터 모델 수정
- 다중 데이터 모델 버전과 가벼운 이전
- 데이터 모델 버전 생성
- 가벼운 이전 활성화
- 엔티티와 속성 이름 변경
- 이름 변경 식별자 제공
- 여러 버전 관리
- 매핑 모델
- 커스텀 엔티티 이전 정책
- 정리
- 데이터 이전 문제
- 9장 다중 뷰 컨트롤러와 실행 취소
- 관리 객체 수정
- 수정 중인 관리 객체의 트랙 유지
- 관리 객체 프로퍼티 갱신
- 관리 객체 검증
- 실행 취소 작업
- 다중 관리 객체 콘텍스트
- 관리 객체 콘텍스트 변동 사항 병합
- 컨트롤 값이 변할 때 관리 객체 값 변경
- 관리 객체 콘텍스트 리셋
- 에디터 컨트롤러로 새로운 객체 추가
- 정리
- 관리 객체 수정
- III부 간단한 코어 데이터 애플리케이션 제작
- 10장 샘플 애플리케이션: Note Collector
- Note Collector 애플리케이션
- Note Collector 프로젝트 생성
- 애플리케이션 데이터 모델
- 추상 엔티티 모델링
- 서브엔티티 모델링
- 관리 객체 클래스 파일 생성
- RootViewController 설정
- 컬렉션 내용 표시
- 화면에 표시할 컬렉션 기억
- 로 데이터 파일 내용 검사
- 아이템 이름 설정, 수정
- 새로운 뷰 컨트롤러 생성
- 노트 화면 표시와 수정
- 미리 생성한 데이터 스토어 제공
- 애플리케이션 번들 내부 데이터로 작업
- 정리
- Note Collector 애플리케이션
- IV부 최적화와 문제 해결
- 11장 iOS 성능 최적화와 메모리 요구 사항
- 성능, 최적화, 속도
- 데이터 저장소 종류
- 바이너리와 메모리 데이터 저장소
- SQLite 데이터 저장소
- SQLite 저장소 모니터링
- 불러오기 최적화
- 불러오기 제한 설정
- 프리디케이트 최적화
- 관계 미리 불러오기
- 기타 객체 미리 불러오기
- 프로퍼티 값 미리 불러오기
- NSFetchedResultsController와 섹션
- 폴팅 관리
- 폴트 없이 ‘안전한’ 메소드
- 프로퍼티 로딩 예방
- 배치 폴팅
- 객체 다시 폴팅
- BLOB 관리
- BLOB을 사용하는 엔티티에 넣기
- BLOB을 별도 엔티티에 넣기
- BLOB을 외부 파일에 넣기
- Instruments로 코어 데이터 모니터링
- 코어 데이터를 사용하지 말아야 할 때
- 기타 메모리 관리 팁
- 필요한 상황에만 실행 취소 관리자 사용
- 관리 객체 콘텍스트 리셋
- 정리
- 12장 코어 데이터 문제 해결
- 코어 데이터 에러 첫 대면
- 찾을 수 없는 모델
- 클래스를 찾을 수 없음?
- 코어 데이터 스레딩 이슈
- 코어 데이터 멀티스레딩 기초
- 스레드 간 데이터 코디네이팅
- 스레드 간 충돌, 데이터 간 충돌 처리
- 조심하자! 임시 ID!
- 관리 객체 문제점
- 프로퍼티 값을 설정할 때 발생하는 크래시
- 커스텀 접근자 메소드가 호출되지 않는 경우
- 관리 객체 무효화
- 실행할 수 없는 폴트
- 객체 불러오기 문제점
- 불러오는 동안 데이터 정렬 문제
- 최근 변화를 보여주지 않는 불러오기 결과
- 정리
- 코어 데이터 에러 첫 대면