
코어데이터는 SQLite를 데이터의 영구 저장소로서 사용할 뿐, 코어데이터 자체는 명백히 ‘프레임 워크’이다.
*DataBase가 아닌 ORM(Object Relational Mapping) 프레임워크
CoreData는 데이터베이스 형태로 구조화된 데이터를 저장하고 관리하는데 사용된다.
SQLite와 유사한 내부 구조를 가지며, "Documents" 디렉토리 내에 SQLite 파일 형태로 저장됩니다. 대용량의 데이터나 복잡한 데이터 모델을 다루는 데 유용합니다.

*관리 객체란?-> DB의 테이블 행, 1개의 레코드를 의미
맨 위의 파란색인 Persistent Container(영구 컨테이너)
관리 객체 context
관리 객체 model
영구 저장소 코디네이터(persistent store coordinator)


“Products”의 이름을 가진 Model을 기반으로 생성된 Persistent Container을 생성하는 것

Persistent container를 들여다보면 위처럼 코어 데이터 스택 구조를 이루는 Model(managedObjectModel), Context, Store Coordinator를 가지고 있는 것을 볼 수 있다.
앱을 실행하는 동안 지속적으로 키-값 쌍을 저장하는 사용자의 기본 데이터베이스에 대한 인터페이스.
User Default는 모든 데이터가 키/밸류 형태로 짝을 이루기 때문에 코어데이터보다 빠르지만, 말 그대로 유저 정보와 같이 작은 데이터를 저장하는데 사용된다.
홈 디렉토리 > Library > Preferences > .plist 에서 확인 가능


let defaults = UserDefaults.standarddefaults.set("value", forkey: "key")
let data1 = defaults.object(forkey: "key") as! String
let data2 = defaults.string(forkey: "key")
타입을 신경쓰지 않고 꺼낸 뒤 올바른 타입으로 타입캐스팅을 해주거나, 타입에 맞는 메서드를 사용한다.
UserDefaults는 Data 형을 따르는데, 이 Data 타입은 Base64 인코딩 형식을 따른다. 즉, 저장할 객체는 모두 Base64 인코딩을 거쳐야 한다.
기본 타입인 Int, String 등은 UserDefaults를 사용할 때 내부적으로 적용되지만, 구조체 같은 경우에는 직접 변환해야 한다.
UserDefaults는 key-value형태로 CoreData보다 속도가 빠를 순 있지만,
앱의 "Preferences" 디렉토리에 저장된다.
Preferences 디렉토리는 앱의 설정 및 사용자 환경 설정과 관련된 정보가 저장되는 공간이므로,
대용량의 데이터는 넣지 않고, 키-값 형태로 사용자 환경 설정을 저장하는 파일을 주로 넣는 목적이 있다.
그러므로 UserDefaults는
사용자의 앱 알림 수신, 자동 로그인 여부, 팝업창 띄우기 여부, 앱 테마 설정 등의
유저의 설정 정보로 쓰인다.
반면에 CoreData는 SQLite와 유사한 내부 구조를 가지며, "Documents" 디렉토리 내에 SQLite 파일 형태로 저장된다.
이 Documents 디렉토리는 앱이 생성하는 데이터 파일이 저장되는 곳으로,
사용자가 앱에서 생성하는 콘텐처, 데이터베이스 파일(CoreData), 사용자가 저장하는 파일 등이 여기에 저장된다.
따라서 대용량의 데이터나 복잡한 데이터 모델을 다루는 데 유용합니다.