반응형
LinkedIn
개발자로 성장하면서 남긴 발자취들을 확인하실 수 있습니다.
Github
WWDC Student Challenge 및 Cherish, Tiramisul 등 개발한 앱들의 코드를 확인하실 수 있습니다.
개인 앱 : Cherish
내 마음을 들여다보는 시간, 체리시는 디자이너와 PM과 함께 진행 중인 1인 개발 프로젝트입니다.
10년 후, 20년 후 나는 어떤 스토리 텔러가 되어 있을지 궁금하다. 내가 만약에 아직 조금 더 탐구하고 싶은 게 있고, 궁금한 게 있다면, 그게 설사 지금 당장의 내 인생에 도움이 안 되는 것 같더라도 경험해보자. 그 경험들을 온전히 즐기며 내 것으로 만들고, 내 일에 녹여내고... 그러다보면 그 점들이 모여 나란 사람을 그려내는 선이 될 테니까.
Recent Posts
Recent Comments
- Total
꿈꾸는리버리
Userdefault란 무엇이고 어떻게 쓰는 건가요 ? (저장, 로드, 삭제) 본문
반응형
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")
반응형
'오뚝이 개발자 > iOS' 카테고리의 다른 글
SFSymbol 팔레트 (0) | 2022.07.18 |
---|---|
가로모드를 원하지 않을 때 (1) | 2022.07.18 |
Localization : 다국어 처리 (2) | 2022.07.11 |
실제 디바이스가 없을 경우 개발 환경에서 할 수 있는 것과 없는 것을 설명하시오. (0) | 2022.07.04 |
WWDC 22 Student Challenge : Winner 후기 + 팁 (7) | 2022.06.23 |
Comments