메모리
우선 코어 데이터를 공부하기 전에 Swift의 메모리에 대해 잠시 정리해보자면
프로그램은 실행되기 위해 메모리에 올라온다. 또한 실행 중인 프로그램은 프로세스라고 부른다.
운영체제(OS)는 메모리(RAM)에 이 프로그램을 위한 공간을 할당해준다.
메모리의 속도등을 기준으로 티어가 나누어져 있다. 위의 사진에선 위로 갈수록 비싸다.
앱을 설치할 때 저장되는 곳은 Disk 이고 실행될 때는 메모리에 잠깐 올라간다.
우리가 흔히 말하는 메모리는 DRAM(Dynamic Random Access Memory) 을 가리킨다.
이때 메모리의 특징이 있다.
그것은 바로 메모리의 데이터는 사라진다는 점이다.
- 프로그램은 실행될 때 메모리에 영역이 할당되고, 해당 영역으로 올라온다.
- 프로세스가 종료되면 메모리에서 해제되고, 다른 프로세스가 해당 공간을 사용하면서 덮어씌워진다.
- 또한 전원이 종료되면 모두 날아간다. (휘발성)
👉 따라서 메모리의 데이터는 사라지기 때문에 데이터를 영구적으로 기억하기 위해서는 내부 저장소가 필요하다.
내부 저장소란?
앱 종료와 함께 사라지지 않는, 앱이 기억하고 있어야 할 비휘발성 데이터를 저장하기 위해 사용되는 개념.
디바이스에 저장되기에 많은 데이터를 저장하기에는 적합하지 않은 방법이다.
데이터를 저장하는 방법으로는 UserDefault, CoreData, 파일 시스템, KeyChain 등의 방법이 있다.
그 중에 코어데이터에 대해 알아보자.
CoreData란?
우선 코어데이터가 할 수 있는 것은 데이터의 영구적인 저장이다.
데이터를 디스크에 저장하여 프로그램이 종료된 이후에도 데이터가 남아있게 하고
이것을 영속적인, 영속성, persistent, persistency 등으로 표현한다.
또한 데이터 간 관계 설정이 가능하다.
ex) 학급과 학생의 관계, 부서와 사원의 관계 등
"CRUD" 데이터의 기본적인 처리가 가능하다.
- Create: 데이터 생성 및 저장하기
- Read: 저장된 데이터를 읽어오기
- Update: 저장된 데이터의 내용을 수정하기
- Delete: 저장된 데이터를 삭제하기
→ 다음과 같이 코어데이터를 사용하여 영구저장소에 데이터의 CRUD가 가능하다.
☑️ 코어데이터의 구성품
코어데이터에서 사용되는 기술을 알아보자!
CRUD를 하기 위해서 Persistent container, Model, Context 우선 이 3가지가 필요하다는 걸 먼저 알고 가자.
1. Persistent container (NSPersistentContainer)
NSPersistanceContainer
"container에 지정한 Model에 정의된 Entity 들을 context 를 활용해서 CRUD 할 것이다."
let container = NSPersistentContainer.init(name: "Datas")
여기서 생성자에 전달한 name 은 컨테이너가 관리할 모델(.xcdatamodeld) 을 지정할 때 쓰인다.
2. Model (NSManagedObjectModel)
.xcdatamodeld 파일(이 클래스로 표현된 것)
파일 그 자체를 표현한다.
3. Context (NSManagedObjectContext)
NSManagedObject의 변경사항(수정사항)을 추적하는 클래스
- CRUD 할 때 꼭 전달함
- CRUD 완료 후 save() 를 호출해서 저장소에 반영함
- NSManagedObject: 우리가 저장할 데이터의 기본 타입 라고 생각하면 편하다.
'Devlog👩🏻💻 > iOS' 카테고리의 다른 글
[iOS] Content Hugging Priority와 Content Compression Resistance Priority (4) | 2024.05.03 |
---|---|
[iOS] 동기 vs 비동기, Serial vs Concurrent 이해하기 (8) | 2024.05.02 |
[iOS] ScrollView 사용하기 (2) | 2024.04.22 |
[iOS] CocoaPods 라이브러리 설치 후 사용하기(Alamofire, Kingfisher) (6) | 2024.04.12 |
[iOS] UIViewController LifeCycle (1) | 2024.03.20 |