본문 바로가기

개발/Swift

[Swift] UserDefaults로 간단한 데이터 저장하기 (Data CRUD - 1)

공부하며 작성한 자료로, 덧붙일 점이나 사실과 다른 점이 있다면 언제든 좋은 지적 부탁드립니다.

 

UserDefaults란?


“앱을 실행하는 동안 지속적으로 Key-Value 쌍을 저장하는 데이터베이스 인터페이스” -Apple

(그러나 우리가 알고있는 DataBase처럼 활용하긴 어렵습니다.)

 

보통 앱을 시작할 때 기본상태정보를 저장하기 위해 사용하고, 싱글톤객체를 사용합니다.

앱이 실행될 때 앱에서 저장한 모든 UserDefaults 데이터가 메모리에 올라갑니다.

(여기에 많은 데이터를 사용하면 메모리 누수의 원인!!)

 

그러므로

 

간단한 볼륨, 마지막으로 설정한 앱 환경설정 등 아주 간단한 것을 저장할때만 사용하는 것이 좋습니다.

 

 

 

Apple 공식문서

https://developer.apple.com/documentation/foundation/userdefaults

 

Apple Developer Documentation

 

developer.apple.com

 


 

0. 여기서 사용할 데이터모델 구조 (TodoModel)

// 데이터 구조
struct TodoModel: Codable {
    let title: String
    var isDone: Bool
}

 

1. UserDefaults 선언하기

let defaults = UserDefaults.standard
    // 어디서 생성하든지 공통으로 사용할수 있는 객체입니다. (Singleton 객체)
    // ViewController1에서 저장한 데이터를 ViewController2에서도 사용가능합니다.

 

2. 데이터 저장하기

let myArray: [String] = ["This is myArray", "is Good?"]
defaults.set(items, forKey: "myArray") 
    // key에는 이것을 지칭할 수 있는 key를 입력합니다. 편의상 직관적으로 myArray로 셋업했습니다.

3. 데이터 불러오기

let loadedData = defaults.value(forKey: "myArray")
    // 저장할 때 설정한 key와 일치하는 데이터를 불러옵니다.

myArray = loadedData as! [String]
    // 데이터는 Any 유형이기 때문에 저장했던 프로퍼티의 데이터 유형으로 
    // 다운캐스팅해주세요. myArray의 유형은 [String] 이었습니다.

조금 더 알아보기

2-1. UserDefaults 로 저장할 수 있는 유형

url? Any?, Bool, Double, Float, Int

위 유형들을 Key-Value 타입(Dictionary)으로 저장합니다.

2-2. UserDefaults 를 사용할 때는 언제일까요?

아주 간단하고 작은 데이터를 저장할 때 사용합니다.

유저가 앱에서 설정한 아주 간단한 환경설정들 정도로 하면 됩니다.

예를 들어 볼륨, 노래를 어디까지 들었는지, 테마는 어떤 테마였는지 아주 간단한 것들이요.

앱을 한번 실행할 때 모든 UserDefaults 데이터가 메모리에 올라가기 때문에

데이터가 많다면 앱이 아주 무거워질 수 있습니다.

반응형