CoreData는 Model 계층의 객체를 관리하는 프레임워크이자 객체의 영속성 관리를 위한 기능을 제공하는 객체 그래프 관리자
이다.
CoreData의 기능에 디바이스에 Permanent Data(영구적인 데이터)를 저장할 수 있는 Persistence가 있는 것이다.
객체 그래프 관리자
CoreData는 객체(Entity)들끼리 Relationship을 구성할 수 있다.
메모리에 객체들이 여러 RelationShip으로 연관되어져 있는 것을 객체 그래프라고하고, 이 형태를 CoreData의 Container에 저장시킨다.
때문에 CoreData를 객체 그래프 관리자라고 하기도 한다.
객체 그래프 관리자는 메모리 내에 그래프를 유지하며, 객체 그래프를 관리한다.
Entity는 데이터베이스에서의 테이블이라고 생각하면 편한다. 실제로 SQLite의 테이블과 매핑된다.
관계형 DataBase와 소통하기 위해서는 SQL이라는 언어를 사용한다.
ORM은 (Object Relation Mapping) 객체와 데이터베이스의 관계를 맵핑해주는 도구이다.
ORM은 프로그래밍 언어의 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑해주는 도구이다.
즉, ORM이란 내가 앱을 만드는데 사용하고 있는 언어를 SQL로 번역해준다고 생각하면 된다.
CoreData는 SQLite의 지원을 받기 때문에 SQL문 작성이 필요하지만 ORM기능을 제공하기 때문에 개발자가 직접 SQL작성할 필요없이 자동으로 객체와 데이터베이스의 데이터가 매핑된다.
데이터베이스는 영속적이고 검색가능한 데이터 저장소다.
이 저장소의 목적은 최신 데이터를 저장하고 로드에오고 업데이트하는것이 주요 목적이다.
하지만 CoreData는 이러한 데이터저장소의 역할도 수행하지만 여러 기능을 추가적으로 가지고 있다.
또한 CoreData는 비검색의 특징을 가지고 있습니다.
객체들이 할당되고 연결되었을 경우, 한 객체에 접근하면 그 객체의 관계가 있는 다른 객체들에게 접근이 가능해진니다.
또한 다른 데이터베이스와 다르게 CoreData는 인메모리 형태로 사용이 가능하다.
대부분 Persistence기능을 활용하지만, In-Memory 형태로 Cache처럼 사용이 가능하다.
일단 UserDefault는 적은 양의 데이터를 저장하는 데 사용하기 적합하다.
그래서 보통 유저의 앱에 대한 셋팅과 같은 민감한 정보를 저장하지 않는데 사용한다.
또한, UserDefault는 암호화되지 않는다. 그리고 또 On-Disk다.
하지만, 그에 반해 CoreData는 암호화 되며 In-Memory, On-Disk를 선택할 수 있다.
또한 객체 그래프 형태로 관리하기 때문에 많은 양의 데이터들을 관리할 수 있다는 점이 차이점으로 생각된다.
CoreData의 구성요소들을 CoreDataStack이라고한다.
그리고 CoreData Stack에는 크게 4가지의 구성요소가 있다.
📌 ManagedObject Model
📌 ManagedObjectContext : 관리객체 컨텍스트
📌 PersistentStoreCoordinator
NSPersistentContainer
인스턴스를 사용하여 모델, 컨텍스트 및 Store Coordinator을 동시에 설정한다.📌 NSPersistentContainer