반응형
Core Data Stack
- Core Data는 4개의 주요 객체로 구성됩니다. 이를 CoreData Stack 이라고 합니다.
- Persistent Store
- 데이터를 영구적으로 저장하는 공간으로, 앱을 종료해도 지속적으로 데이터가 저장됩니다.
- 데이터 종류에 따라 2가지 종류로 나뉘어집니다.
- Atomic 저장소 : 데이터를 처리하기 위해서는 모든 데이터를 메모리에 로드해야 합니다. (XML, Binary, In-Memory)
- Non-atomic 저장소 : 필요한 부분만 메모리에 로드합니다. (SQLite)
- Core Data는 Non-atomic 저장소인 SQLite를 기본 저장소로 사용합니다.
- Object Model
- 어떤 데이터들이 저장되며, 해당 데이터들이 어떤 관계를 가지고 있는지 설명하는 객체입니다.
- 코드를 통해서도 모델을 수정할 수 있지만 주로 Xcode의 모델 편집기를 활용해 수정하게 됩니다.
- Persistent Store Coordinator
- 영구 저장소에 저장된 객체를 저장하거나 불러오는 객체입니다.
- Context에 변경사항을 저장하면 Object Model을 통해 구조를 파악하고 영구저장소에 저장합니다.
- Managed Object Context
- Core Data에서 데이터를 생성하면 바로 영구저장소에 저장되는 것이 아니고 이 Context 내부에 임시 데이터로 유지됩니다.
- Context에게 영구저장을 요청하면 영구적으로 처리됩니다.
- 반면 저장하지 않을 경우 처리된 모든 데이터가 사라집니다.
- 영구저장소에서 읽어온 데이터도 Context에서 처리됩니다.
- 이는 영구저장소 본연의 객체가 아닌 복사본입니다.
- Persistent Store
Managed Object
- Core Data에서 영구적으로 저장되는 것은 Entity이지만 실질적으로 Context에서 다루는 것은 Managed Object입니다.
- Object Model에 정의된 Entity는 NSManagedObject 클래스와 1:1로 연결됩니다.
- NSManagedObject는 key-value 방식을 통해 속성을 관리할 수 있습니다.
- 하지만 Swift에서는 이를 이용하기보단 이를 상속한 Entity Class를 사용합니다.
- Entity Class에서는 직접적으로 속성에 접근하여 수정할 수 있기 때문에 더 용이합니다.
Managed Object Context
- Core Data를 이해하는데 핵심이 되는 객체입니다.
- Core Data에서 데이터를 생성하면 바로 영구저장소에 저장되는 것이 아니고 이 Context 내부에 임시 데이터로 유지됩니다.
- Context에게 영구저장을 요청하면 영구적으로 처리됩니다.
- 반면 저장하지 않을 경우 처리된 모든 데이터가 사라집니다.
- 영구저장소에서 읽어온 데이터도 Context에서 처리됩니다.
- 이는 영구저장소 본연의 객체가 아닌 복사본입니다.
- 새로운 Managed Object를 생성하면 특정 Context에 등록됩니다.
- 영구저장소에서 특정 Entity를 불러오면 이에 맞는 Managed Object가 Context에 등록됩니다.
- Context에서 제공하는 API들은 thread에 안전하지 않기 때문에 동일한 thread에서 호출해야 합니다.
- 일반적으로는 Blocking이 발생하지 않지만, 큰 작업의 경우 Background Context를 사용합니다.
- 해당 Context가 생성된 thread에서 작업을 처리하도록 하는 perform 메서드도 제공하기 때문에 이를 활용하여 더 안정적으로 context를 사용할 수 있습니다.
반응형
'🍎 Apple > SwiftData & CoreData' 카테고리의 다른 글
[SwiftData] Meet SwiftData (0) | 2023.07.29 |
---|---|
[SwiftData] 기본설명 및 특징 (0) | 2023.07.29 |
[CoreData] 기초개념 (3): Entity Relationship (0) | 2022.01.03 |
[CoreData] 기초개념 (2): Query & Sorting (0) | 2022.01.03 |
[CoreData] 기초개념 (1): Entity, CRUD (0) | 2022.01.01 |