
아직 Core Data가 무엇인지 모른다면 CoreData 개발자문서 번역 , Context란? 를 각각 클릭해서 보고 오자.
Core Data 다른 관련된 자료들을 구글링 해서 보고오면 또 큰 도움이 될 것이다.
0. 프로젝트 준비하기

Xcode 에서 create new Project를 선택 한다.
그 다음 iOS 항목에서 App 을 선택해 준 후,
환경설정은 왼쪽과 같이 설정해주면 된다.
이름과 팀, 조직식별자는 편하게 설정해도 되지만,
아랫 부분, 특히 Use Core Data는 꼭 체크해주도록 하자.
(나중에 CoreData를 추가할 수 있지만, 귀찮으니...)
1. Entity와 Attribute 생성
엑셀을 한번이라도 다루어 본 적이 있다면, DB가 Table과 Field로 이루어져 있다는 것을 쉽게 이해할 수 있을 것이다.
CoreData에서 Table은 Entity이고, Field는 Attribute라고 부른다.

우리가 만들게 될 Entity를 도식화 해보았다.
우리는 Category라는 Entity를 생성할 것이다.
Category는 name, color, done 이라는 Attribute들을 가진다.
(다 만들어보면 좋겠지만 실습에서는 name만 사용할 것이다.)
name 은 String타입을 가지게 될 것이다.
자, 이렇게 DB를 어떻게 만들지 결정하였다면, 한번 만들어보자.

프로젝트의 Directory Tree를 보게 되면, 다음과 같이 "CoreDataPractice.xcdatamodeld" 이라는 DataModel 파일이 있을 것이다.
이 파일의 이름이 너무 길어서 불편하니까, Data.xcdatamodeld 로 바꿔주자.
DataModel 파일 이름을 변경했다면, AppDelegate에게 파일의 이름이 바뀌었다는 것을 알려주어야 한다.
AppDelegate.swift에서 persistentContainer를 생성하는 코드의 클로저 부분의 이름을
CoreDataPractice -> Data 로 바꾸어준다.
lazy var persistentContainer: NSPersistentContainer = {
let container = NSPersistentContainer(name: "Data")
container.loadPersistentStores(completionHandler: { (storeDescription, error) in
if let error = error as NSError? {
fatalError("Unresolved error \(error), \(error.userInfo)")
}
})
return container
}()
자, 이제 이 부분에 대해서 설명을 해보겠다.
도대체 persistentContainer가 무엇일까? 왜 만들어주고 이걸 어디에 쓰게 되는거지?
우리가 persistentContainer를 사용하지 않고 앱을 만들게 되면,
우리가 앱 안에 등록한 데이터들은 앱이 terminate되거나 refresh 됨과 동시에 바사삭 사라져버린다...
(UserDefault를 통해 plist에 저장하거나 realm과 같은 다른 framework를 사용하는 방법도 있지만, 그런 방법은 생각하지 않겠다!)
persistentContainer는 이름 그대로, 우리의 DB를 저장할 영속적인 저장소를 의미한다.
그리고 그 저장소 파일이, 방금 우리가 이름을 바꾼, Data.xcdatamodeld 이다.
코드를 하나씩 뜯어보자.
혹시, 저 var 앞에 lazy가 의미하는 바를 모른다면, lazy에 대해서 간략하게 살펴본 글이 있으니, 클릭해서 참고하면 좋을 것 같다!ㅎㅎ
클로저(솔직히 얘 때문에 코드 읽기 불편함..) 덕분에 조금 복잡해졌지만,
결국에 저 코드는 ...
lazy var persistentContainer: NSPersistentContainer()
이렇게, NSPersistentContainer 클래스를 인스턴스화 한 것에 불과하다.
인스턴스화 할 때, 환경설정을 다음과 같이 진행한 것이다.
let container = NSPersistentContainer(name: "Data")
container.loadPersistentStores(completionHandler: { (storeDescription, error) in
if let error = error as NSError? {
fatalError("Unresolved error \(error), \(error.userInfo)")
}
})
return container
"Data" 라는 이름의 Container를 가져와서,
loadPersistentStores 를 통해, persistant 저장소를 persistant container에 로드 하도록 지시하게 된다.
(container 안에 storage가 들어가는 작업이지만, 그냥 container를 저장소라고 봐도 무방하다!)
그리고 만들어진 container를 return 해서 persistentContainer 변수가 되는 것이다.
자 이제, 우리는 Data.xcdatamodeld 파일을 바탕으로 Persistent Container를 만들었다!
이제, Data.xcdatamodeld 파일에 한번 들어가보자.
아직 빈 DB이기 때문에 텅텅 비어있을 것이다.
여기에 우리가 아까 구상했던, 테이블을 Entity로 한번 생성해보자.

파일 내부에서, Xcode 아랫부분에 있는 Add Entity를 통해서 새 Entity를 생성한 후,
해당 Entity 이름을 Category로 바꿔주자
Entity의 환경설정은 다음과 같이 하면 된다.
만약에 저 Class 항목의 옵션들이 의미하는 것을 잘 알지 못하겠다면,
그냥 저렇게 두기만 하고 넘어가도 되고 (당장 몰라도 상관은 없다.)
궁금하다면, codgen 옵션 탐구 글을 클릭해서 참고해도 좋다.

Entity 설정을 마쳤으면, 이제 Attribute 를 생성해보자.
일단 name이라는 이름의 Attribute를 하나 생성해주고, type을 String으로 설정해준다.
그리고 오른쪽의 옵션에서, Optional을 해제해준다.
옵셔널을 왜 해제해주어야 할까?
nil값을 허락하지 않기 위해서이다.
우리가 카테고리 tableView를 만드는 것이기 때문에, 반드시 name에는 어떤 값이 들어가야 한다.

하단의 Style을 눌러보면, 우리의 귀여운 Category Entitiy 모양을 감상할 수 있다ㅎㅎ

'iOS 개발 > CoreData' 카테고리의 다른 글
[CoreData] Relationship을 통해 Data를 관리하기 (0) | 2022.01.06 |
---|---|
[CoreData] Coredata 자체를 sort 할 수 있을까? (0) | 2021.11.17 |
[Core Data] Context를 이용해 Entity에 Attributes들을 추가, 삭제 (0) | 2021.09.08 |
[Core Data] Entity의 Name Attribute들을 Cell에 표시하기 (0) | 2021.09.07 |
[Core Data] TableView와 Navgation Cotroller을 임베디드 하기 (0) | 2021.09.07 |
[Core Data] Context란? (0) | 2021.09.06 |
[Core Data] Entity Class 설정 - Codegen option 탐구 (0) | 2021.09.03 |
[애플 Document 번역] Core Data (0) | 2021.08.27 |