반응형
LinkedIn 개발자로 성장하면서 남긴 발자취들을 확인하실 수 있습니다.
Github WWDC Student Challenge 및 Cherish, Tiramisul 등 개발한 앱들의 코드를 확인하실 수 있습니다.
개인 앱 : Cherish 내 마음을 들여다보는 시간, 체리시는 디자이너와 PM과 함께 진행 중인 1인 개발 프로젝트입니다.
10년 후, 20년 후 나는 어떤 스토리 텔러가 되어 있을지 궁금하다. 내가 만약에 아직 조금 더 탐구하고 싶은 게 있고, 궁금한 게 있다면, 그게 설사 지금 당장의 내 인생에 도움이 안 되는 것 같더라도 경험해보자. 그 경험들을 온전히 즐기며 내 것으로 만들고, 내 일에 녹여내고... 그러다보면 그 점들이 모여 나란 사람을 그려내는 선이 될 테니까.

Recent Posts
Recent Comments
Total
관리 메뉴

꿈꾸는리버리

Userdefault란 무엇이고 어떻게 쓰는 건가요 ? (저장, 로드, 삭제) 본문

오뚝이 개발자/iOS

Userdefault란 무엇이고 어떻게 쓰는 건가요 ? (저장, 로드, 삭제)

rriver2 2022. 7. 14. 20:16
반응형

  UserDefaults란?  

  UserDefaults는 어떨때 쓰나요 ?  

앱을 껐다 켜도 이 디바이스에 계속 값이 저장되었으면 좋겠어요 ~ 하는 것들 !

-> 나 홀로 방구석에서 신기해했던 건데, ㅎㅎ

시뮬레이터랑 프리뷰의 기기가 달라서 userdefault가 다르고, 시뮬레이터안에서의 기기종이 다르면 저장된 userdefault도 다르다 !

 

  UserDefaults는 어떻게 쓰나요 ?  

 key-value 쌍으로 저장이되기 때문에, key 값을 통해 로드할 수 있다.

 

  UserDefaults 추가 상식  

1) 현재 프로세스 내에서 동기적으로 변경되고 영구 저장소 및 기타 프로세스에선 비동기적으로 변경

 

2) NSDate, NSString, NSNumber, NSData, NSArray, NSDictionary 들은 기본적으로 저장

 

 

3) struct와 같은 타입은 encode를 사용해줘야 한다.

-> 이 이유는 왜냐면 " 일반적으로 시작 시 앱의 기본 상태 또는 기본적으로 작동하는 방식을 결정하는 데 사용"된다. 따라서 이름도 기본값인...!!

-> 그래서 사실은 userDefault를 쓸 일이 거의 없고 되게 작은 기록들을 한다. 즉, 대량의 유사한 데이터 userDefault가 아닌 SQLite 같은 곳에 저장하는 게 맞다는 것 ! 

-> 또 디바이스에 저장된다는 것은 앱 어디서든 접근이 가능한 값으로 존재한다는 것이기 때문에 예민한 정보들은 저장이 되어서는 안된다.

 

 근데.. 나는 왜 공부했는가..? 

ㅎㅎ,, 일단 값은 저장해야 하는데 SQLite이나, CoreData를 공부할 시간도 없었고, swiftUI나 swift가 아닌 다른 것에 우선순위를 높게 둘 수 없었었다. 그래서 처음 앱은 userDefault로 값을 저장했었고, 이제는 CoreData, SQLite을 공부해보려 한다 !

앱 자체에 정보를 저장을 하고자 할 때 다른 것들보다 입문자들에게 보다 쉽게 접근할 수 있는 userDefault!! 

나처럼 swiftUI나 UIKit을 처음 공부하기 시작한 분들에게 이 글이 조금이나마 도움이 되길...바라본다..

 

 

  UserDefaults의 사용  

일반 integer, bool, float, double 인 경우

// 저장
UserDefaults.standard.set(25, forKey: "Age")
defUserDefaults.standardaults.set(true, forKey: "UseTouchID")
UserDefaults.standard.set(CGFloat.pi, forKey: "Pi")

// 로드
UserDefaults.standard.object(forKey: "Age")

// 삭제
UserDefaults.standard.removeObject(forKey: "Age")

 

array나 dictionary인 경우

// array 저장
let array = ["Hello", "World"]
UserDefaults.standard.set(array, forKey: "SavedArray")

// dictionary 저장
let dict = ["Name": "Paul", "Country": "UK"]
UserDefaults.standard.set(dict, forKey: "SavedDict")

// 로드
// as? ??을 해주는 경우는 만약 찾지 못했을 경우를 대비한 것임 !
let array = UserDefaults.standard.object(forKey:"SavedArray") as? [String] ?? [String]()
let dict = UserDefaults.standard.object(forKey: "SavedDict") as? [String: String] ?? [String: String]()

// 삭제
UserDefaults.standard.removeObject(forKey: "SavedDict")

 

Struct인 경우 -> codable하게 바꿔줘야 한다.

struct Student: Codable { // 프로토콜 넣은 거 확인 !
    let name: String
    let age: Int
}

let student = Student(name: "jake", age: 20)

// 저장
let encoder = JSONEncoder()
if let encoded = try? encoder.encode(student) {
    UserDefaults.standard.setValue(encoded, forKey: "student")
}

// 로드
let savedStudent = UserDefaults.standard.object(forKey: "student") as? Data {
    let decoder = JSONDecoder()
    if let loadedStudent = try? decoder.decode(Student.self, from: savedStudent) {
        print(loadedStudent.name)
    }
}
        

// 삭제
UserDefaults.standard.removeObject(forKey: "student")

 

반응형
Comments