Core Data는 iOS 애플리케이션의 지속 가능한 객체 그래프를 관리하기위한 Apple의 기본 프레임 워크로 서 있습니다. 개발자가 raw SQL을 작성하거나 파일 직렬화를 관리하기 위해 Rather보다 Core Data는 스토리지, 변경 추적 및 데이터 모델링의 복잡성을 처리하는 고급 객체 중심 인터페이스를 제공합니다. 로컬 데이터 작업에 대한 모든 iOS 개발자는 핵심 데이터의 기능과 모범 사례를 이해해야하며, 성능 희생없이 응답, 데이터-리치 앱을 구축 할 수 있습니다.

핵심 Data Architecture 이해

Core Data는 단순히 데이터베이스가 아닙니다. 디스크에 데이터를 persist 할 수있는 객체 그래프 관리 프레임 워크이지만, 그것은 또한 in-memory 객체 관계, undo 관리 및 검증을 관리합니다. 아키텍처는 일반적으로 Core Data stack]라고 불리는 것을 형성하는 데 함께 작동하는 4 가지 주요 구성 요소를 포함합니다.

핵심 데이터 스택

모든 Core Data 구현은 정의된 순서에 연결된 객체의 특정 세트를 요구합니다. 스택은 다음과 같습니다.

  • Managed Object Context (NSManagedObjectContext):] 개발자가 관리 대상을 작업하는 스크래치패드. 모든 변경은 영구 저장소에 저장되기 전에 컨텍스트 내부에서 발생합니다.
  • Persistent Store Coordinator (NSPersistentStoreCoordinator):] 컨텍스트와 실제적인 지속점(s) 사이의 다리로 동작합니다. 이 미디어 액세스는 데이터 무결성을 보장합니다.
  • Managed Object Model (NSManagedObjectModel):] data schema의 엔티티티, 속성 및 관계 설명. 그것은 일반적으로 .xcdatamodeld 파일에 시각적으로 정의된다.
  • Persistent Store: SQLite, Binary, in-memory일 수 있는 실제 저장 메커니즘. SQLite는 생산 앱의 기본입니다.

현대 iOS 개발은 종종 클래스를 사용하여 자동으로 전체 스택을 만들고 구성합니다. 이것은 보일러 플레이트를 제거하고 구성의 기회를 감소시킵니다.

프로젝트에서 핵심 데이터를 설정

iOS 프로젝트에 핵심 데이터 추가는 여러 단계의 데이터를 관리하기위한 기초 구축, 각 단계를 필요로한다. 이 과정은 데이터 모델 파일을 생성하고, 다음 엔티티티를 정의하고, 마지막으로 앱의 수명주기와 스택을 통합.

Data Model 만들기

Data Model] Template(extension .xcdatamodeld)를 사용하여 Xcode 프로젝트에 새 파일을 추가함으로써 시작하십시오. 이 시각 편집기에서는 entities(표본과 동일), 속성(columns) 및 기타 엔티티와 관계를 정의합니다. 또한 쿼리 성능을 최적화하는 데이터 유형, 기본 값, 유효성 규칙 및 색인 옵션을 지정할 수 있습니다.

기업 및 관계 정의

각 법인은 사용자, 작업, 또는 제품과 같은 앱 관리의 유형을 나타냅니다. 속성 (이름, 가격, 날짜, 기타)의 특성을 정의합니다. 관계는 객체 그래프를 추적하고 자동으로 propagate deletions 또는 업데이트를 추적하는 핵심 데이터를 가능하게합니다. 예를 들어, "Person" entity에는 "PhoneNumber"entities와 한 사람 관계를 가질 수 있습니다. Core Data는 방향을 fetch 할 수 있습니다.

관계 설계시, ]]에주의를 기울일 때 규칙]. 옵션에는 Nullify, Cascade 및 Deny가 포함됩니다. 잘못된 규칙을 선택하면 예상치 못한 데이터 손실이나 또는 판결 된 레코드를 이끌 수 있습니다. Cascade는 종종 부모-아이 관계를 위해 적합하며, Nullify는 옵션 협회에 잘 작동합니다.

NSManagedObject Subclasses 생성

Xcode는 Xcode가 완료되면 각 엔티티티에 대한 Swift 클래스를 자동으로 생성합니다. 이 하위 클래스는 에서 상속하고 정의된 속성과 관계를 포함합니다. Xcode 8부터 권장된 접근법은 Class Definition](기본)로, 생성된 데이터 폴더에 생성된 파일을 유지하고 있습니다. 또는 "Manual/None"을 선택하고, 사용자 지정 속성을 추가할 때 추가할 수 있습니다.

CRUD 운영 수행

스택을 사용하여 ]를 사용하여, 삽입, fetch, update, delete manage object를 할 수 있습니다. 모든 작업은 컨텍스트 내에서 수행되어야하며, 변경은 성공적인 호출 후만 지속됩니다.

창조 및 저축 목표

새로운 객체를 삽입하려면 를 사용하며 그 속성을 설정합니다. 모든 변경 후 ]를 호출합니다. 항상 ]] 블록에서 호출을 저장하여 오류를 안전하게 처리할 수 있습니다. 특히 사용자 개시 작업 중.

Predicates 및 Sort Descriptors를 사용하여 데이터 가져 오기

은 물체를 쿼리하기위한 기본 메커니즘입니다. 를 사용하여 결과를 제약 할 수 있습니다 (예 : [[FLT : 9]]]) 및 [[FLT : 10]]]로 결과를 주문합니다. Core Data는 또한 화합물 predicates, subqueries 및 fetching relationships eagerly를 지원합니다. 대용량 데이터 세트의 경우 항상 [[FLT : 11]]을 사용하여 fetch 크기를 제한하고 [[FLT : 12]]를 사용하여 메모리 사용을 고려하십시오.

업데이트 및 삭제

객체를 업데이트하는 것은 context 내에서 속성을 수정하는 것과 간단합니다. Core Data는 변경 사항을 자동으로 추적합니다. 삭제하려면 ]를 호출하십시오. 이후 컨텍스트를 저장하는 것을 잊지 마십시오. 일괄 삭제를 위해, 를 사용하여 메모리에 대한 영구 저장소에서 직접 작동하며 성능이 극적으로 향상됩니다.

생산-Ready Core Data에 대한 모범 사례

잘 구성된 핵심 데이터 스택은 병목이나 버그의 소스가 될 수 있으므로 주의 깊게 처리되지 않습니다. 설치 된 패턴을 통해 앱은 반응적이고 안정적이고 확장성이 유지됩니다.

실 안전 및 통화

Core Data contexts는 기본적으로 스레드 안전하지 않습니다. 스레드 사이에 컨텍스트를 공유하지 마십시오. 대신, ]] ]]에서 사용해서 배경 작업을 위한 개인 큐 컨텍스트를 만들 수 있습니다. 주요 스레드에 개체에 접근할 때, 또는 ]를 사용하여 실을 confinement를 보장합니다. SwiftUI의 경우, 속성 래퍼는 자동으로 메인 스레드의 변경을 관찰하지만, 여전히 무거운 상황에 따라 달라질 수 있습니다.

번역 및 마이그레이션

앱이 진화함에 따라 데이터 모델은 속성을 변경하거나, 관계 변경하거나, 속성을 변경할 것입니다. Core Data는 마이그레이션의 두 가지 유형을 지원합니다: 경량 마이그레이션] 및 custom migration]. 경량 마이그레이션은 간단한 변경을 처리 (거의 속성을 변경, 식별자와 관련된 속성 변경). ]custom migration]. 경량 마이그레이션은 사용자가 데이터를 변경할 때, 자동적으로 변경할 수 있습니다.

성능 최적화

Data Data 성능은 데이터 모델 설계로 시작된다. indexes]을 사용하여, 종종 전형적으로 나타나는 속성에 대해 사용합니다. 하위 설정이 필요할 때 전체 객체 그래프를 흠뻑 취하지 마십시오. 대신, 과 ]를 사용하십시오. Core Data support faulting, object's 속성이 아닌, prefLT:2]를 사용하여 전체 객체를 불러오는 것을 고려할 수 있습니다. ]]

오류 처리

모든 fetch, save 및 삭제 작업은 잠재적으로 실패 할 수 있습니다. 항상 ] 블록에 이러한 통화를 둘러싸고 사용자에 의미있는 오류 메시지를 제시합니다. 오류 또는 제약 위반으로 인해 실패를 종종 저장하므로 오류를 신중하게 검사합니다. Core Data의 오류 객체는 특정 피드백을 제공하기 위해 그것을 통해 그것을 처리 할 수있는 여러 언로딩 오류를 포함합니다. 일괄 작업의 경우, 적절하게 처리 - 배치 처리 할 수 있으므로 처리 할 수 있으므로 처리 할 수 없습니다.

SwiftUI와 Core Data 통합

SwiftUI는 속성 래퍼 및 환경 값을 통해 핵심 데이터에 대한 일류 지원을 제공합니다. 래퍼는 데이터 변경 시 주요 맥락을 자동으로 관찰하고 볼 수 있습니다. 속성 선언에서 정렬 디지터와 사전 다이렉트를 구성할 수 있습니다. 더 많은 과립 제어를 위해 관리 된 객체 컨텍스트를 사용하여 환경으로 주입합니다. @ObservedObject` 또는 `@StateObject`와 함께 작동하면 모델이 무거운 모델을 파악하는 데 필요한 모델을 파악할 수 있습니다.

SwiftUI는 또한 undo 관리를 단순화합니다: context에 ]를 설정하고 SwiftUI는 시스템의 undo/redo gestures와 자동으로 통합됩니다.

Core Data vs. 다른 지속 옵션

Core Data는 iOS 로컬 스토리지에 가장 성숙하고 통합 된 솔루션이지만 항상 최고의 선택입니다. 대안과 비교하십시오.

  • UserDefaults: 작은 수량의 사용자 선호도에 적합하지만, 복잡하거나 큰 데이터에 적합하다.
  • Realm:]는 단순한 API와 자동 반응 업데이트를 제공하지만, 의존성을 추가하고 SwiftUI와 함께 깊이 통합하지 않습니다.
  • Raw SQLite:은 대용량 데이터셋이나 복잡한 쿼리에 대한 최대 제어 및 성능을 제공하지만, 연결, 마이그레이션 및 나사를 수동으로 관리해야합니다.
  • CloudKit + Core Data:] iCloud sync, Apple's ] Bridges Core Data and CloudKit, 클라우드로 로컬 변경을 자동으로 동기화합니다.

구성 데이터, 관계, 오프라인 기능을 요구하는 대부분의 표준 iOS 앱을 위해 Core Data는 플랫폼과 지속적인 Apple 지원과의 원활한 통합으로 인해 권장되는 선택이 남아 있습니다.

관련 기사

Core Data는 지속적인 스토리지, 변경 추적 및 관계 관리의 복잡성을 요약하는 객체 그래프 관리 시스템을 제공합니다. 관리된 객체 컨텍스트에서 지속적인 컨테이너에 대한 지속적 인 개념을 이해하고, concurrency, 성능 및 오류 처리를위한 입증 된 관행을 따르는 개발자는 견고하고 반응성이 있는 앱을 구축할 수 있습니다. ‐do list 또는 data-intensive Enterprise 애플리케이션을 구축하는 경우, Mastering Core Data는 iOS 관리에서 효율적인 로컬 데이터 관리 기능을 잠금 해제하는 귀중한 기술입니다.

더 많은 연구에 대해서는 Apple Core Data documentation], Core Data Programming Guide, ]Ray Wenderlich의 Core Data by Tutorials 의 핸즈에 운동과 심층적인 통찰력을 갖는 것이 낫습니다.