| SQL | CoreData |
|---|---|
| 데이터베이스 파일 | 데이터 모델 파일 |
| 테이블 | Entity |
| 컬럼 | Attribute |
| 외래키+조인 | 릴레이션 |
ORM 매핑 : 객체와 관계형 데이터 베이스를 자동으로 mapping 시켜주는 방식
VO(Value Object)
- 데이터 베이스의 한 레코드를 담는 객체
- 필드, 생성자, Getter/Setter 메서드 구성
- 레코드(행)의 갯수만큼 생성해서 사용
- 필드 클래스
- VO 객체, Domain 객체, DTO 객체, 자바빈즈라고 부른다.

Core Data는 어플리케이션에서 Model 계층의 객체를 관리하는 데 사용하는 프레임워크이자, 라이프 사이클이나 영속성 관리를 위한 기능을 제공하는 객체 그래프 관리자 (Object Graph Manager)
1. 객체 그래프(Object Graph)란?
- 객체를 하나의 노드로 간주, 서로 간의 연관 관계를 링크로 이어보면 다양하게 연결되는 복합적인 그래프 형태의 도형
- 객체 : 독립적이고 자체적인 생명 주기를 가지면서 속성과 기능으로 이루어진 단위 구성체
- 특성 : Core Data가 객체 그래프를 담당한다는 것은 객체끼리 연결할 수 있으며, 그 객체끼리는 영속적으로 동기화
- 연결된 A, B 두 객체에서 A 객체에 데이터가 삭제되면 자동으로 B 객체 데이터도 삭제
- DB는 두 테이블에 연관 정보를 불러오려면 join 조건이 필요
- 코어 데이터의 구조
예시 : 직원들의 데이터를 다룰 때, DB에서 직원들의 정보를 읽어오면 그대로 사용하지 않고, VO 인스턴스에 담아서 사용, 이럴 때 VO가 관리 객체에 해당
Context가 데이터 요청 -> Cordinator가 요청을 받고, 영구 저장소에서 데이터 탐색 -> Cordinator가 MO 인스턴스를 생성하여 반환
MO vs MOM(Managed Object Model)
- MOM : 클래스이자 형식, 구조를 의미, 데이터를 CRUD하지 않으며 관리 객체의 각 요소를 제대로 담을 수 잇도록 저장 데이터를 구조화
- MO : MOM을 바탕으로 생성된 인스턴스
- CRUD : Create, Read, Update, Delete
| 타입 | 설명 |
|---|---|
| 인메모리 저장소 타입 (NSInmemoryStore Type | 메모리 기반의 저장 방식(영구 저장소 사용 X), 앱 종료시 데이터 보존이 되지 않음 |
| 플랫 바이너리 저장소 타입 (NSBinaryStore Type) | 데이터를 단순 바이너리 파일 형식으로 저장, 장점은 조회 성능 개선, 단점 초기 로딩 시간 증가 |
| XML 저장소 타입 (NSXMLStore Type) | 원자성, 장점은 직접 열어보고 확인 가능(초기 디버깅용이), 단점은 처리 속도가 느림 |
| SQLite 데이터 베이스 (NSSQLiteStore Type) | 객체 그래프 중 일부만 로딩, 가장 많이 사용됨 |
"영구저장소"와 "레코드(메모리에 저장된 데이터)"사이의 데이터 교환 원리
출처 : 김종권의 iOS 블로그