YunDaeHyeon
← Lab

UserDefaults와 커스텀 객체를 UserDefaults에 저장하는 방법

스터디2025.08.14
  • Swift
  • Codable

UserDefaults | Apple Developer Documentation

UserDefaults란?

  • UserDefaults는 iOS에서 앱의 간단한 데이터를 키-값 의 형태로 영구적으로 저장하는 작은 데이터베이스 인터페이스이다.
  • 앱 실행 시 사용자의 설정이나 환경 값, 작은 상태 정보를 지속적으로 관리할 수 있다.
  • 앱 종료 및 재시작 이후에도 값이 남아있기 때문에 영속성에 용이하다.
  • 보통 문자열, 숫자, 불리언, 배열, 딕셔너리 등 Data 타입이나 기본 자료형에 적합하다.
  • 대형 데이터나 복잡한 구조에는 적합하지 않다..

The UserDefaults class provides convenience methods for accessing common types such as floats, doubles, integers, Boolean values, and URLs. These methods are described in Setting Default Values.

A default object must be a property list—that is, an instance of (or for collections, a combination of instances of) NSData, NSString, NSNumber, NSDate, NSArray, or NSDictionary. If you want to store any other type of object, you should typically archive it to create an instance of NSData_.

이 클래스는 부동 소숫점이나 실수, 정수, 부울 값, URL과 같은 일반적인 타입에 접근하기 위해 사용됩니다. 저장될 수 있는 객체는_ NSData__, NSString__, NSNumber__, NSDate__, NSArray 또는 임의의 인스턴스여야 합니다. (컬렉션의 경우는 인스턴스의 조합이어야 한다. NSDictionary__) 만약, 다른 유형의 객체를 저장하려면 _NSData_로 변환한 뒤 저장해야합니다.

🤔 커스텀 객체를 UserDefaults에 저장하는 과정은 어떻게 될까?

1. Codable 채택

  • 우선, UserDefaults에 저장하기 위해선 기본 자료형이나 Data만 가능하기 때문에 Codable 을 채택하여 JSON으로 직렬화를 수행해야한다.
  • 따라서 원하는 타입(구조체 혹은 클래스)에 Codable을 채택시킨다.
struct MyModel: Codable {
    var title: String
    var value: Int
}

2. 직렬화 후 저장

  • JSON으로 변환하고자 하면 JSONEncoder를 사용해 NSData 로 변환한 뒤 UserDefaults에 저장한다.
let model = MyModel(title: "Test", value: 100)
if let encoded = try? JSONEncoder().encode(model) {
    UserDefaults.standard.set(encoded, forKey: "savedModel")
}

3. 다시 불러온 후 역직렬화

  • UserDefaults에 저장된 타입은 NSData이기 때문에 다시 JSONDecoder를 사용하여 객체로 복원한다.
if let savedData = UserDefaults.standard.data(forKey: "savedModel") {
    if let loadedModel = try? JSONDecoder().decode(MyModel.self, from: savedData) {
        print(loadedModel.title)
    }
}

⭐ 중요한 정보

  1. UserDefaults는 기본 자료형 또는 NSData 타입만 저장 가능하다~
  • 커스텀 객체는 Codable + Encoder/Decoder 로 변환한 뒤 Data 타입으로 저장하자.
  1. 대규모 데이터 저장에는 적합하지 않다.
  • 간단한 설정이나 고유값을 활용할 때 사용하자.