iOS/데이터베이스 조작

Userdefaults로 데이터 Persistency 유지하기

소재훈 2022. 1. 27. 02:23

Userdefault는 사용자 기기내에 데이터를 Persistence하게 유지하기 위해서 사용하는 클래스이다. 싱글톤이기 때문에 어디서든 동기화된 데이터를 사용할 수도 있게 해준다.

let defaults = UserDefaults.standard

 

defaults 라는 변수를 통해서 유저의 데이터에 접근하거나 새로운 데이터를 저장할 수 있다.

데이터의 저장은 set 메서드를 사용한다. set메서드를 사용하여 User의 default preference에 데이터를 저장할 수 있다.

value에는 저장할 데이터가 오고, forKey에는 데이터의 이름이 온다. 데이터를 꺼내 사용할 때는 forKey에서 지정한 이름을 사용한다.

여러 데이터를 저장한 모습을 살펴보자.

defaults.set(0.24, forKey: "Volume") // 실수
defaults.set(true, forKey: "MusicOn") // boolean 값
defaults.set("Jaehoon", forKey: "PlayerName") // 문자열
defaults.set(Date(), forKey: "AppLastOpenedByUser") // Date(), 이때는 첫번째 파라미터의 타입이 Any?이다.

let array = [1, 2, 3] // collection 도 저장할 수 있다.
defaults.set(array, forKey: "myArray") // 배열

let dictionary = ["name": "Jaehoon So"]
defaults.set(dictionary, forKey: "myDictionary") // 사전

 

그리고 꺼내서 사용할 때는 다음과 같이 사용한다.

let volume = defaults.float(forKey: "Volume")
let appLastOpen = defaults.object(forKey: "AppLastOpenedByUser")
let myArray = defaults.array(forKey: "myArray") as! [Int]
let myDictionary = defaults.dictionary(forKey: "myDictionary") as! [String: String]

 

실수는 float메서드, 배열은 array, 사전은 dictionary 메서드를 사용한다. Any?타입으로 저장한 데이터는 object메서드를 사용하여 저장할 수 있다. 그리고 꺼내진 데이터는 Optional 이기 때문에 as! 키워드를 사용하여, 세번째 줄과 네번째 줄과 같이 데이터형을 직접 지정해 줄 수도 있다.

 

UserDefaults는 음악의 볼륨 값이나 간단한 글자 등 KB 단위의 데이터만 저장해야 한다. 앱이 실행되면서 UserDefaults 에 있는 데이터까지 함께 로드해야 되기 때문에, 용량이 큰 데이터를 저장하게 되면 시스템의 성능이 저하되기 때문이다. 

그리고 UserDefault 로 저장한 데이터는 데이터베이스가 아닌  단순히 key-value형태로 저장된 데이터일뿐이다. 데이터베이스를 이용한 데이터 관리는 다른 방법을 사용한다.