유저 디폴트(UserDefaults)
전화번호부 앱을 만든다고 생각해보자
let이나 var로 선언한 배열 타입 안에 데이터를 append해서 저장할 수도 있겠지만,
이런 형태라면 앱을 껐다키면 앱을 실행하면서 저장했던 데이터는 사라진다
(ram에 올라간 데이터는 앱을 종료하면 휘발되기 때문에)
앱을 껐다켜도 데이터를 저장하고 싶을 때 사용하려면
서버에 데이터를 저장하거나 CoreData와 UserDefatults 또는 키체인에 저장할 수 있는데,
오늘은 UserDefaults에 대해서 알아보도록 하자
⎮ UserDefaults가 뭔데?
https://developer.apple.com/documentation/foundation/userdefaults
UserDefaults | Apple Developer Documentation
An interface to the user’s defaults database, where you store key-value pairs persistently across launches of your app.
developer.apple.com
애플 공식 문서에 따르면, "앱을 실행할때마다 키-값 쌍을 영구적으로 저장하는 사용자 기본 데이터베이스에 대한 인터페이스"이다
UserDefaults는 float, double, int, boolean, URL, string과 같은 일반적인 타입에 접근하기 위한
편리한 메서드를 제공한다고 나와있다.
만약 이 외의 타입(사용자 정의 타입)을 저장하려면, archive를 통해 NSData 인스턴스를 생성해서 저장해야 한다고 쓰여있는데,
쉽게 말하자면 객체를 저장 가능한 형식(보통 Data 또는 NSData)으로 변환하는 것으로 이해하면 된다
위 설명에서 중요한 키워드를 2가지 뽑아볼 수 있는데,
1. Key-Value로 저장한다는 점
2. float, double, int, boolean, URL, string과 같은 원시 타입을 지원하며, 다른 Type은 데이터 변환 과정을 거쳐야 한다는 점
그렇다면 struct Type의 데이터를 UserDefaults에 사용하려면 어떻게 해야할까?
⎮ UserDefaults에 구조체 저장하는 법
UserDefaults에 원시 타입이 아닌 구조체를 저장하려면 먼저 Data로 변환해줘야 한다
1. 구조체 정의, Codable 채택하기
struct PhoneNumberData: Codable {
var name: String
var phoneNumber: String
}
2. 구조체 인스턴스 생성
let phoneNumber = PhoneNumberData(name: "John", phoneNumber: "010-1111-1111")
3. 구조체를 Data로 인코딩하고, UserDefaults에 저장
let encoder = JSONEncoder()
if let encodedData = try? encoder.encode(phoneNumber) {
UserDefaults.standard.set(encodedData, forKey: "savedPhoneNumber")
}
* JSONEncoder를 사용하여 구조체를 Data로 인코딩하고, 'savedPhoneNumber'라는 키로 UserDefaults에 저장
⎮ UserDefaults에서 저장된 데이터 사용하는 법
앞서 UserDefaults는 Key와 Value 쌍으로 데이터를 저장한다고 했다.
그렇다면, 저장된 데이터는 Key로 접근하면 Value를 받아올 수 있다.
그러나 UserDefatults에 저장할 때 데이터 Type으로 인코딩해서 저장해줬기 때문에
이를 사용할 때는 디코딩해서 데이터를 불러와야 한다
if let phoneNumberData = UserDefaults.standard.data(forKey: "savedPhoneNumber") {
let decoder = JSONDecoder()
if let loadPhoneNumber = try? decoder.decode(PhoneNumberData.self, from: phoneNumberData) {
print("Loaded PhoneNumber: \(loadedPhoneNumber)")
}
}
⎮ UserDefaults를 사용할 때 주의할 점
UserDefaults는 앱 SandBox 내부에 있는 .plist 파일에 데이터를 저장하며, 앱 외부에서는 접근할 수 없다.
(단, 탈옥한 기기에서는 plist 파일에 접근 가능하므로 민감한 정보는 저장하지 않는 것이 좋다)
'스파르타코딩 클럽 > 기초' 카테고리의 다른 글
| iOS | AppStore에 배포하기(feat. 한 큐에 바로 성공!) (1) | 2025.06.21 |
|---|---|
| Swift | 모야(Moya)가 모야요? (0) | 2025.05.25 |
| Swift | KingFisher(feat. 이미지 캐싱) (0) | 2025.05.17 |
| Swift | CocoaPods 설치하기 (0) | 2025.04.26 |
| Swift | Swift에서 한글을 정렬하는 방법(+ sort, sorted) (0) | 2025.04.23 |