iOS 면접 질문 중 하나인
앱의 콘텐츠나 데이터 자체를 저장/보관하는 특별한 객체를 무엇이라고 하는가?
이라는 질문의 대한 답을 찾던 도중 나온 답변이 크게 두가지로 좁혀졌었다.
바로 CoreData와 UserDefaults 이 두개이다.
근데 이 두개는 완전히 다른 객체이다.
이 두개의 공통적인 부분은 데이터를 저장/보관하는 객체라는 점이다.
먼저 두 객체가 어떤 것인지 살펴보고 차이점에 대해 따져보자.
UserDefault의 정의를 살펴보면
간단하게 말하자면, key-value 쌍으로 디바이스에 데이터를 저장하는 것을 도와주는 인터페이스이다.
추가적으로 애플에서 설명하는 것은 UserDefaults는 Default System에 접근할 수 있도록 인터페이스를 제공하는 클래스라고 한다.
UserDefaults는 런타임 환경에서 동작하고, 앱이 실행되는 동안 default Database에 접근해서 데이터를 기록, 가져오는 역할을 하게 된다.
CoreData의 정의를 살펴보면
간단하게 말하면, 디바이스에서 데이터를 유지하거나 캐싱하는 것을 관리하기 위한 프레임워크이다. (코어데이터는 데이터베이스가 아니다)
데이터를 저장할 때 데이터에 대한 모델을 유저가 원하는 모델로 정의하고 저장할 수 있다.
UserDefaults는 key-value값으로 빠르게 저장할 수 있는 장점이 있고 CoreData에 비해서 쉽게 사용할 수 있기 때문에 되도록이면 간단한 저장 데이터, 예를 들자면 스위치의 ON/OFF 여부 처럼 간단한 부분을 저장하고 로드하는 곳에서 사용하면 좋다.
CoreData는 모델을 이용하여 사용자의 데이터를 대용량으로 받아야하는 경우에 사용하면 좋다. 예를 들자면, 리마인더에 사용하는 메모 String, Image Data, 평점 등등 데이터를 한번에 받기 위해서는 CoreData를 사용하는 것이 좋다.
오늘은 CoreData와 UserDefaults에 대해 알아보았고, 차이점에 대해 알아보았다.
단순한 저장을 위한 것이라면 UserDefaults를, 조금 구체화한 저장을 원한다면 CoreData를 사용한다는 것을 알게 되었다.
https://cocoacasts.com/ud-10-should-you-use-core-data-or-user-defaults
https://velog.io/@rnfxl92/UserDefaults-FileManger-CoreData에대한-간단한-설명
https://developer.apple.com/documentation/coredata/
https://developer.apple.com/documentation/foundation/userdefaults