오늘의 학습
- 프로그램에서 데이터 이전은 쉬운 것 같으면서도 뭔가 어렵다.
이해를 덜하고 있어서 그런가? userdefault로 데이터를 저장하던 방식을 CoreData로 변경하는 도전을 해보고 있다. 클론 코딩을 하거나 이전 어플을 구현해볼 때는 firebase만 활용해봤기 때문에 CoreData가 무엇인지, 어떻게 써야하는지 몰랐다.
지금도 여전히 모르지만 오늘 공부하면서 배운 점을 정리해보자면...
- CoreData는 관계형 데이터베이스다.
각각 값을 Key와 Value 형식으로 접근하는 Dictionary 타입이 아니라, 하나의 테이블로 데이터를 정리한다. 열과 행으로 데이터를 나열하고 key값을 주는 만큼 데이터를 하나로 묶기 편해지는 장점이 있어 보인다. 효율적으로 데이터를 관리할 수 있게 돕는다고 하는데, 어떤 차이점이 있는지 아직 명확하게 모르겠다.
- 적용하기 상당히 쉽다는 점
userdefault도 상당히 쉬웠지만, coreData도 생각보다 적용하기는 쉬웠다.
(적용만... 기존에 있던 데이터를 가지고 오는 방법은 여전히 모르겠다.)
중요한 점은, userdefault는 말그대로 사용자의 초기 설정 값을 저장해두는 공간이었다. 예를 들어 어플을 접속할 때 dark mode를 유지할지, 나이와 생일은 언제인지 (알림을 주기 위해) 등등의 사소한 데이터 값이었다. 무엇보다 모든 어플에서 해당 데이터에 접근이 가능했기에 userdefault로 접근을 하는 방법은 그렇게 추천하는 방식이 아니었다. CoreData는 반면, 다양한 데이터를 저장할 수 있는 역할을 하는 데이터베이스였다.
userdefault보다 한 층 더 깊은 데이터베이스이면서도 적용하기 쉽다는 점에서 무조건 적용해보고 싶다는 생각을 하게 됐다.
하지만
데이터베이스를 이전하는 과정에서 이해가 안되는 부분이 많이 있다.
1. model 데이터 변경
userdefault를 사용했을 때는 아래와 같은 구조체를 model로 사용했다.
struct Todo {
var id: Int
var name: String
var date: Date
...
}
직접 데이터를 선언하는 만큼 직관적이고 쉬웠다.(어떤 타입인지 이해가 됐기 때문에)
하지만 CoreData를 활용해보고자 한 시점에서 위 모델 방식이 아닌 다른 방식으로 구성을 해야했다. 가장 먼저 DataModel을 생성한 이후 NSManagedObject 파일을 만들어야 했다.
DataModel에서는 Entity, Attributes 등 처음보는 키워드들을 마주하게 됐는데, 이들이 위의 변수명 및 타입을 대신한다고 한다.
여전히 CoreDataClass와 NSManagedObject는 무엇을 하는지 모르겠다.