2-3달 전 근무중 앱을 개발하면서 처음으로 UserDefaults를 사용해보았다
사진 데이터와 관련 정보를 디바이스에 저장하고 불러오는 작업이 필요했는데 서버가 없이 개발할 때였기에 UserDefaults 를 사용했었다!
지금보면 간단한데 그 때는 왜그런거지? 집중력을 몇주동안 잃어버렸나..ㅋㅋㅋ 민망할정도네 이거~ 껄껄~
오늘은 iOS 앱과 관련된 간단한 정보를 디바이스에 영구적으로 저장하는 인터페이스인 UserDefaults에 대해 공부해보자!
공식문서에서 UserDefaults는 어떻게 정의되어 있는가!?
음, 일단 기본적으로 제공되는 DB를 사용할 수 있는 인터페이스 라는거고, key-value 쌍으로 유지 된다는거구만!
앱에서 사용되거나 필요한 데이터를 영구적으로 보관하기 위한 방법으로는 네트워크 서버 이용, CoreData, UserDefaults 등이 있다.
이 중 UserDefaults 는 런타임 환경에서 동작하면서, 앱이 실행되는 동안 기본 저장소 (default database)에 접근해 데이터를 기록하고, 가져오는 역할을 하는 인터페이스이다.
이처럼 데이터를 저장하고 기록하는 UserDefaults객체가 여러개 인스턴스화 될 수 있다면 어떨까? 자연스레 따라오는 데이터 동기화 문제부터 벌써부터 골치아픈 문제들이 떠오른다. 애초에 방대한 양의 데이터나 민감한 정보를 저장하는 용도가 아니기에 UserDefaults는 싱글톤 패턴으로 설계되어 앱 전체에서 단 하나의 인스턴스만 존재한다!
UserDefaults는 float, double, integer, boolean 과 같은 공통 유형에 액세스하기위한 메소드를 제공할 뿐만아니라 NSData, NSString, NSNumber, NSDate, NSArray 또는 NSDictionary 유형의 객체를 저장할 수도 있다.
다른 유형의 객체일 경우 NSKeyedArchiver 를 사용해서 데이터를 저장하고 검색하여야 한다.
정리하면,
float
, double
, NSData
, NSString
등의 데이터 타입 저장, 불러오기UserDefaults에 데이터를 저장할 땐 open func set(_ value: Any?, forKey defaultName: String)
함수를 사용한다. 말했듯 UserDefaults는 싱글톤 객체이기 때문에 UserDefaults.set(210724, forKey: "key")
와 같이 사용한다
저장된 데이터를 불러올 때엔
string, array, dictionary 등 저장된 데이터의 형식에 맞추어 함수를 사용하고 함께 저장된 key 값으로 데이터를 찾을 수 있다
허브가 없어서 기기 연결을 하지 못해서 직접 테스트를 해보진 못했지만ㅜ, 간단하게 코드를 적어보면
UserDefaults.standard.setValue(2021, forKey: "year")
UserDefaults.standard.setValue(7, forKey: "month")
UserDefaults.standard.setValue("코로나", forKey: "stopPlease")
let year = UserDefaults.standard.integer(forKey: "year")
let month = UserDefaults.standard.integer(forKey: "month")
let f__k = UserDefaults.standard.string(forKey: "stopPlease")
print("\(year)년 \(month)월 빡치는건 \(f__k) ^^")
와 같이 사용할 수 있다!
주문한 허브가 오면 보다 자세한 내용을 실제적인 테스트와 함께 보충해야지!