본문 바로가기
Category/iOS

UserDefaults, iOS에서 간단한 데이터를 로컬에 저장하는 방법

by Corinee 2024. 10. 25.
728x90
반응형

UserDefaults는 iOS에서 간단한 데이터를 로컬에 영구적으로 저장하고 불러올 수 있는 방법을 제공합니다. 주로 앱 설정, 사용자 선호도, 작은 데이터(예: 문자열, 숫자, 배열 등)를 저장하는 데 사용됩니다.

UserDefaults는 앱이 재실행되더라도 저장된 데이터를 유지하기 때문에, 앱을 닫았다가 다시 열어도 이전에 저장한 데이터에 접근할 수 있습니다.

UserDefaults의 특징

  1. 간단한 데이터 저장: 문자열, 숫자, 배열, 딕셔너리 등 간단한 데이터 유형을 쉽게 저장할 수 있습니다.
  2. 영구 저장: 한 번 저장된 데이터는 앱이 재시작되거나 종료되더라도 유지됩니다.
  3. 사용자 맞춤 설정: 주로 앱의 설정이나 사용자 선호도를 저장하는 데 사용됩니다.
  4. 앱별 저장: UserDefaults에 저장된 데이터는 앱마다 별도로 저장되며, 다른 앱에서 접근할 수 없습니다.

사용 가능한 데이터 유형

  • String, Int, Float, Double, Bool
  • Array, Dictionary (각 요소가 UserDefaults에 저장 가능한 타입이어야 함)
  • Data (인코딩된 바이너리 데이터)

주요 메서드

1. 데이터 저장:

UserDefaults.standard.set("some value", forKey: "myKey")
  • set(_:forKey:) 메서드를 사용해 데이터를 저장합니다.
  • "some value"라는 값을 "myKey"라는 키로 저장합니다.

2. 데이터 불러오기:

let value = UserDefaults.standard.string(forKey: "myKey")
  • 저장된 데이터를 가져오려면 string(forKey:)와 같은 메서드를 사용합니다. 키가 존재하지 않을 경우 nil을 반환합니다.

3. 데이터 삭제:

UserDefaults.standard.removeObject(forKey: "myKey")
  • 특정 키에 해당하는 데이터를 삭제하려면 removeObject(forKey:) 메서드를 사용합니다.

4. 배열 저장 및 불러오기:

let array = ["item1", "item2", "item3"]
UserDefaults.standard.set(array, forKey: "myArrayKey")

let savedArray = UserDefaults.standard.stringArray(forKey: "myArrayKey")
  • 배열과 같은 복합 데이터를 저장하고 불러올 수 있습니다.

5. 커스텀 객체 저장하기: UserDefaults는 기본적으로 Codable 구조체나 클래스 같은 커스텀 객체를 직접 저장할 수 없습니다. 이를 저장하려면 JSONEncoderJSONDecoder를 사용해 객체를 Data 형식으로 인코딩하거나 디코딩해야 합니다.

struct Goal: Codable {
    let title: String
    let targetDate: Date
}

let goal = Goal(title: "New Year Resolution", targetDate: Date())

// 객체 저장하기
let encoder = JSONEncoder()
if let encodedGoal = try? encoder.encode(goal) {
    UserDefaults.standard.set(encodedGoal, forKey: "goalKey")
}

// 객체 불러오기
if let savedGoalData = UserDefaults.standard.data(forKey: "goalKey"),
   let decodedGoal = try? JSONDecoder().decode(Goal.self, from: savedGoalData) {
    print(decodedGoal.title)  // "New Year Resolution"
}

UserDefaults 사용 예시

문자열 저장 및 불러오기

// 데이터 저장
UserDefaults.standard.set("Hello, World!", forKey: "greeting")

// 데이터 불러오기
if let greeting = UserDefaults.standard.string(forKey: "greeting") {
    print(greeting)  // "Hello, World!"
}

숫자 저장 및 불러오기

// 데이터 저장
UserDefaults.standard.set(42, forKey: "score")

// 데이터 불러오기
let score = UserDefaults.standard.integer(forKey: "score")
print(score)  // 42

배열 저장 및 불러오기

// 데이터 저장
let fruits = ["Apple", "Banana", "Cherry"]
UserDefaults.standard.set(fruits, forKey: "fruitsKey")

// 데이터 불러오기
if let savedFruits = UserDefaults.standard.stringArray(forKey: "fruitsKey") {
    print(savedFruits)  // ["Apple", "Banana", "Cherry"]
}

언제 UserDefaults를 사용해야 하나?

  • 작고 단순한 데이터: 앱 설정, 사용자 선호도, 점수, 사용자 이름 등 크기가 작고 복잡하지 않은 데이터를 저장할 때.
  • 앱 설정 관리: UserDefaults는 간단한 앱 설정(예: 다크 모드 설정, 알림 설정 등)을 저장하고 불러오는 데 매우 유용합니다.

그러나 대용량 데이터나 중요한 데이터를 저장할 때는 Core Data나 외부 데이터베이스 같은 더 강력한 솔루션을 고려해야 합니다.

UserDefaults의 한계:

  • 대용량 데이터 부적합: UserDefaults는 소량의 데이터를 저장하는 데 최적화되어 있으며, 이미지나 큰 파일을 저장하는 데는 적합하지 않습니다.
  • 보안: UserDefaults에 저장된 데이터는 기본적으로 암호화되지 않으므로, 민감한 데이터를 저장할 때는 신중해야 합니다. 민감한 데이터는 Keychain 같은 더 안전한 저장소를 사용하는 것이 좋습니다.

정리

  • UserDefaults는 앱 내에서 간단한 데이터를 저장하고 관리하는 데 유용한 도구입니다.
  • 문자열, 숫자, 배열, 딕셔너리와 같은 데이터를 쉽게 저장하고 불러올 수 있습니다.
  • 복잡한 데이터 구조를 저장할 때는 Codable과 함께 사용하여 객체를 JSON으로 변환하고 저장할 수 있습니다.