[IOS] UserDefaults에 dictionary를 저장하는 방법

iOS에서 UserDefaults에 dictionary를 저장하는 방법은 간단합니다. UserDefaults는 간단한 데이터를 저장하기에 적합한 방법으로, 사용자 설정과 같은 작은 데이터를 저장하는 데 사용됩니다. 딕셔너리는 키-값 쌍의 컬렉션으로 사용되므로, 이를 UserDefaults에 저장하려면 dictionary 자체를 저장하는 것이 가능합니다.

다음은 iOS에서 UserDefaults에 dictionary를 저장하는 방법입니다:


// 저장할 딕셔너리 생성
let myDictionary: [String: Any] = [
    "name": "John Doe",
    "age": 30,
    "isPremiumUser": true
]

// UserDefaults 객체 생성
let userDefaults = UserDefaults.standard

// 딕셔너리 저장
userDefaults.set(myDictionary, forKey: "myDictionaryKey")

// UserDefaults 변경사항 저장
userDefaults.synchronize()

위의 코드에서는 myDictionary라는 딕셔너리를 생성하고, UserDefaults의 set(_:forKey:) 메서드를 사용하여 “myDictionaryKey”라는 키로 해당 딕셔너리를 저장합니다. 마지막으로, synchronize() 메서드를 호출하여 변경사항을 저장합니다. synchronize()를 호출하지 않아도 일반적으로 UserDefaults가 자동으로 변경사항을 저장하지만, 명시적으로 호출하는 것이 권장됩니다.

이제 딕셔너리를 UserDefaults에서 가져오려면 다음과 같이 할 수 있습니다:

// UserDefaults 객체 생성
let userDefaults = UserDefaults.standard

// 저장된 딕셔너리 가져오기
if let storedDictionary = userDefaults.dictionary(forKey: "myDictionaryKey") as? [String: Any] {
    // 딕셔너리가 정상적으로 가져와졌을 때 처리
    print(storedDictionary)
} else {
    // 딕셔너리가 없거나 형변환에 실패했을 때 처리
    print("No dictionary found or data type mismatch.")
}

주의할 점은 UserDefaults에 저장 가능한 데이터 타입은 NSString, NSNumber, NSData, NSDate, NSArray, NSDictionary입니다. 따라서 custom 클래스와 같이 위 타입에 해당하지 않는 데이터는 직접 UserDefaults에 저장할 수 없습니다. 이런 경우에는 데이터를 직렬화하여 위의 데이터 타입 중 하나로 변환한 후 저장해야 합니다. 대표적인 직렬화 방법으로 JSONSerialization을 이용하는 것이 있습니다.