728x90
UserDefaults는 iOS에서 간단한 데이터를 로컬에 영구적으로 저장하고 불러올 수 있는 방법을 제공합니다. 주로 앱 설정, 사용자 선호도, 작은 데이터(예: 문자열, 숫자, 배열 등)를 저장하는 데 사용됩니다.
UserDefaults는 앱이 재실행되더라도 저장된 데이터를 유지하기 때문에, 앱을 닫았다가 다시 열어도 이전에 저장한 데이터에 접근할 수 있습니다.
UserDefaults의 특징
- 간단한 데이터 저장: 문자열, 숫자, 배열, 딕셔너리 등 간단한 데이터 유형을 쉽게 저장할 수 있습니다.
- 영구 저장: 한 번 저장된 데이터는 앱이 재시작되거나 종료되더라도 유지됩니다.
- 사용자 맞춤 설정: 주로 앱의 설정이나 사용자 선호도를 저장하는 데 사용됩니다.
- 앱별 저장: 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 구조체나 클래스 같은 커스텀 객체를 직접 저장할 수 없습니다. 이를 저장하려면 JSONEncoder와 JSONDecoder를 사용해 객체를 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으로 변환하고 저장할 수 있습니다.
728x90
'Category > iOS' 카테고리의 다른 글
Hashable - 객체가 고유한 해시 값을 가질 수 있도록 하는 프로토콜 (0) | 2024.10.28 |
---|---|
TimeZone, iOS에서 시간 다루기 (1) | 2024.10.24 |
iOS 실제 기기에서 앱을 테스트하려면? (0) | 2024.10.24 |
SwiftUI 기본 폰트 스타일 정리 (0) | 2024.10.23 |
CocoaPods 및 Podfile 총정리 (2) | 2024.09.29 |