정의
- 애플리케이션의 영구 데이터를 저장하는 프레임워크
- 임시 데이터를 캐시 하는 프레임워크
- 단일 기기에서 앱에 실행 취소 기능을 추가하는 프레임워크
- 앱의 콘텐츠나 데이터 자체를 저장/보관하는 특별한 객체
- Core Data는 ORM 매핑 프레임워크(데이터 저장 프레임워크)로, 데이터 베이스가 아닙니다.
Core Data
1, In-Memory 방식이 존재
- In-Memory방식 : 디스크에 저장하지 않고, 휘발성으로 테스트같이 잠깐 이용하려고 하는 경우에 사용하는 방식
- 사용하려는 모든 데이터는 우선 메모리에 로딩되는 과정이 존재합니다.
- 코어 데이터는 읽고 쓰는 모든 데이터를 원칙적으로 메모리에 로드된 다음에 처리합니다.
- (다른 DB 방식은 효율성을 위해 읽기 목적의 데이터 일부만 메모리에 로드합니다.)
2, * Entity(엔터티)를 통해 데이터 저장 구조 정의
- 코어 데이터는 엔터티를 통해 데이터 저장 구조를 정의합니다.
- (다른 DB 방식은 일반적으로 테이블을 통해 데이터 저장 구조를 정의합니다.)
* Entity(엔터티) : 데이터가 저장될 구조
- Attribute(어트리뷰트) : 엔터티의 하위 속성들을 정의하는 역할
- Relation(릴레이션) : 엔터티끼리의 관계 정의
- Fatched Properties(패치속성) : 템플릿 형태로 만들어 놓은 것(반복되는 요청, 값만 바뀌는 비슷한 요청을 묶어놓은 것)
3, 용어
SQLite | Core Data |
데이터베이스 파일 | 데이터 모델 파일 |
테이블 | 엔터티 |
컬럼 | 어트리뷰트 |
외래키 + 조인 | 릴레이션 |
4, 데이터를 객체로 취급
- 코어 데이터는 테이블의 행, 레코드 하나하나를 독립된 객체로 사용합니다.
5, 데이터 접근 방법
- 코어 데이터는 DAO 패턴을 사용합니다.(단, core data에서는 DAO객체를 자동으로 제공)
- SQLite에서 DAO클래스를 만들고, 그 객체로 접근하는 것과 같이 사용합니다.
6, 관리 객체(Managed Object) : MO 패턴
- VO(Value Object)패턴과 동일한 개념으로 core data에서는 MO패턴이라고 합니다.
- MO클래스의 프로퍼티를 엔터티의 각 어트리뷰트와 직접 연결시키는 방식(*ORM매핑)을 사용합니다.
(Object Relation Mapping : 객체와 관계형 데이터 베이스를 자동으로 매핑시켜주는 방식)
객체 그래프 관리자(Object Graph Manager)
- 코어 데이터는 애플리케이션에서 Model계층의 객체를 관리하는 데 사용하는 프레임워크이자, 라이프 사이클이나 영속성 관리를 위한 기능을 제공하는 객체 그래프 관리자입니다.
객체 그래프(Object Graph)란?
- 객체를 하나의 노드로 간주하고 서로 간의 연관 관계를 링크로 이어보면 다양하게 연결되는 복합적인 그래프 형태의 도형
특성
- 코어 데이터가 객체 그래프를 담당한다는 것은 객체끼리 연결할 수 있으며, 해당 객체끼리 영속적으로 동기화한다는 의미입니다.
코어 데이터의 구조
1, 관리 객체(Managed Obect) : MSManagedObject
- 테이블에서 레코드를 읽을 때, 코어 데이터에서 생성되는 객체를 저장하는 자료형
2, 관리 객체 컨텍스트(Managed Object Context)
- 관리 객체 컨텍스트는 핵심적인 두 가지 역할을 합니다.
1, MO를 가지고 CRUD역할 수행
- 건텐스트에 담긴 객체는 영구 저장소로 이동해 저장, 삭제가 가능
- 코어 데이터는 메모리에 로드된 상태로 처리되는데, 이때 메모리가 콘텍스트를 의미
2, "영구 저장소"와 "영구 저장소 코디네이터"에 대한 관리자 역할
- 읽기와 쓰기를 영구 저장소에 요청
3, 영구 저장소 코디네이터(Persistent Store Coordinator)
- 컨텍스트와 직접 데이터를 주고받으면서 다양한 영구 저장소들의 접근을 조정하고 입출력을 담당합니다.
- 동작 방식
- 컨텍스트가 데이터를 요청
- 코디네이터가 요청을 받고, 영구 저장소에서 데이터 탐색
- 코디 네이터가 MO인스턴스를 생성해 반환
4, 관리 객체 모델(Managed Object Model)
- Entity(엔터티)의 구조를 정의하는 객체인 동시에, 이를 바탕으로 MO패턴의 모델 클래스를 참조
*MOM(Managed Object Model) : 클래스이자 형식, 구조를 의미
- 데이터를 CRUD하지 않으며 관리 객체의 각 요소를 제대로 담을 수 있도록 저장 데이터를 구조화
*MO : MOM을 바탕으로 생성된 인스턴스
5, 영구 객체 저장소(Persistent Object Store)
- XML 저장소 타입을 사용하며, SQLite데이터베이스를 사용하는 것이 용이
타입 | 설명 |
인메모리 저장소 타입 (NSInmemoryStroeType) |
- 메모리 기반의 저장 방식 - 앱 종료 시 데이터 보존 X |
플랫 바이너리 저장소 타입 (NSBinaryStoreType) |
- 데이터를 단순 바이너리 파일 형식으로 저장 - 장점 : 조회 성능 개선 - 단점 : 초기 로딩 시간 증가 |
XML 저장소 타입 (NSXMLStoreType) |
- 원자성 - 장점 : 직접 열어보고 확인 가능, 초기 디버깅에 용이 - 단점 : 처리 속도가 느림 |
SQLite 데이터베이스 (NSSQLiteStoreType) |
- 객체 그래프 중 일부만 로딩 - 가장 많이 사용 |
코어 데이터의 한계
1, in-memory 방식
- 메모리에 로딩된 객체에 대해서만 수정 가능
2, 데이터 로직에서의 한계
- 중복된 값의 입력을 방지하는 "Unique"키가 없어, 앱에서 비즈니스 로직을 통해 처리해야 함.
3, thread-safe하지 않음
- thread끼리 Lock 기능이 존재하지 않음.
내용 출처
https://ios-development.tistory.com/89
https://sihyungyou.github.io/iOS-coredata/
'iOS > iOS' 카테고리의 다른 글
UIView 에서 Layer 객체는 무엇이고 어떤 역할을 담당하는지 설명하시오. (0) | 2022.04.18 |
---|---|
앱이 시작할 때 main.c 에 있는 UIApplicationMain 함수에 의해서 생성되는 객체? (0) | 2022.04.15 |
Codable (0) | 2022.04.13 |
AnyObject (0) | 2022.04.11 |
모든 View Controller 객체의 상위 클래스는 무엇이고 그 역할은 무엇인가? (0) | 2022.04.09 |
댓글