이번 포스트부터 Core Data가 무엇인지, 어떻게 사용하는지에 대해서 알아보고자 합니다. 오랜만에 블로그를 작성하는 것이기 때문에 이번 시리즈는 짧은 호흡으로 최대한 자주 작성하여 Core Data를 빠르게 익히는 것을 목표로 하고 있습니다.

  • Core Data란?
    Apple은 Core Data를 다음과 같이 설명하고 있습니다.

    Core Data is a framework that you use to manage the model layer objects in your application. It provides generalized and automated solutions to common tasks associated with object life cycle and object graph management, including persistence.

    번역: Core Data는 애플리케이션의 모델 계층의 객체를 관리하기 위한 프레임워크입니다. 이 프레임워크는 객체의 영속 기능을 포함한 객체 생명주기 및 객체 관계도 관리 작업에 대한 일반적이고 자동화 된 방법을 제시합니다.

    즉, Core Data는 MVC 등의 아키텍처에서 모델(Model)에서 사용하는 프레임워크입니다. Core Data가 제공하는 다양한 기능들 중 대표적인 것을 몇가지 살펴보면 다음과 같습니다.

    • 데이터의 변화를 추적해서 되돌리기(Undo), 재실행(Redo)등을 적용할 수 있습니다.

    • 데이터 변화를 자동으로 전파해서, 모델의 일관성을 유지합니다.

    • 저장 장치에 데이터를 저장하거나, 저장 장치에서 데이터를 불러오는 과정을 수행합니다.

    • 데이터 처리를 최적화해서, 오버헤드를 줄여줍니다.

    • 데이터의 버전 관리나 마이그레이션하는 기능을 제공합니다.

  • Core Data 스택
    Core Data는 다음과 같은 구조를 가지고 있습니다.

    Core Data Stack

    • Model(NSManagedObjectModel): Core Data에서 관리하는 객체들과 그 객체들 사이의 관계를 표현한 데이터 모델(객체 그래프) 파일을 의미합니다.

    • Store Coordinator(NSPersistentStoreCoordinator): Model에 의해 정의된 데이터들이 실제로 저장된 Persistent Store를 관리하는 객체 입니다. Persistent Store에서 데이터를 가져오고, 저장 될 때 데이터가 올바른지 검증하는 역할도 담당합니다.

    • Context(NSManagedObjectContext): Persistent Store의 뷰에 해당하는 객체입니다. 해당 객체를 통해서 원하는 데이터를 가져오고 조작하고, 원하면 Persistent Store에 반영할 수 있습니다.

    • Persistent Container(NSPersistentContainer, iOS 10 이상): 위 3개의 요소를 간편하게 사용할 수 있도록 추상화 시켜놓은 객체입니다. iOS 10 이전에는 위 3개 요소를 개발자가 직접 초기화해줘야 했지만, iOS 10 부터는 NSPersistentContainer를 이용해서 간단하게 3개 요소를 한꺼번에 초기화 할 수 있게 되었습니다.

다음 포스트 부터, 실제로 Core Data를 어떻게 사용할 수 있는지에 대해서 좀 더 자세히 알아보도록 하겠습니다.


참고 자료
Core Data Programming Guide