2021. 12. 17. 00:36ㆍSwift, iOS Foundation
iOS에서는 ViewController 간 데이터를 전달하는 방식을 크게 2가지로 나눌 수 있다.
데이터를 직접 전달하는 직접 전달(동기) 방식과,
데이터를 저장하고 필요할 때 꺼내오는 방식인 간접 전달(비동기) 방식으로 나누어진다.
오늘은 이 두 방식 중에서, 필요할 때 값을 꺼내올 수 있도록 쓸 수 있는 비동기 방식 중, UserDefaults라는 것을 사용하는 방법에 대해 공부를 해보려고 한다.
UserDefaults란 iOS 프로젝트 내에 있는 데이터 저장소라고 이해하면 된다.
기본 프로젝트 폴더를 보면 info.plist라는 파일이 있는 것을 확인할 수 있는데,
UserDefaults도 plist처럼 Key-Value 형태로 값을 저장하고 꺼내올 수 있는 것이 특징이다.
UserDefaults 데이터는 기기 자체에 저장되어 있는 값이기 때문에 앱을 종료하더라도 데이터는 보존된다.
해당 특성으로 인해, 사용자 기본 설정과 같은 단일 데이터 값을 저장하는 데에는 적합하다고 볼 수 있지만,
보안상 취약하다는 문제점도 동시에 갖고 있어, 토큰값과 같은 민감한 값 대신 간단한 값을 사용하는 데에만 사용하도록 하자.
아래는 공통으로 사용할 코드이므로, 상수로 따로 분리해서 사용하기도 한다.
let defaults = UserDefaults.standard
1️⃣ 데이터 저장하기
UserDefaults에서는 set 메서드를 사용해서 데이터를 저장한다.
UserDefaults.standard.set(저장할 내용, forKey: 값을 저장, 연결할 Key 이름)
// 예시: 스위치값을 저장한다 했을 때
UserDefaults.standard.set(TestSwitch.isOn, forKey: "switchState")
defaults.set(TestSwitch.isOn, forKey: "switchState") // 위에 공통 상수를 사용할 경우
2️⃣ 데이터 꺼내오기
값을 꺼낼 때도 저장할 때와 유사하다.
set 메서드를 사용하는 대신, 값을 가져오는 타입을 메서드처럼 직접 사용해주면 된다.
이때 원하는 값은 처음 저장할 때 사용한 forKey값을 이용해서 꺼내오게 될 것이다.
UserDefaults.standard.가져오고자 하는 형태(forKey: 값을 저장, 연결했던 Key 이름)
// 예시: 저장한 스위치값을 가져온다 했을 때
TestSwitch.isOn = UserDefaults.standard.bool(forKey: "switchState")
TestSwitch.isOn = defaults.bool(forKey: "switchState") // 위에 공통 상수를 사용할 경우
3️⃣ 데이터 삭제하기
UserDefaults에 저장되어 있는 객체를 지울 때는 removeObject 메서드를 사용한다.
UserDefaults.standard.removeObject(forKey: 값을 저장, 연결할 Key 이름)
// 예시: 스위치값을 지울 때
UserDefaults.standard.removeObject(forKey: "switchState")
defaults.removeObject(forKey: "switchState") // 위에 공통 상수를 사용할 경우
4️⃣ UserDefaults에 저장되어 있는 모든 객체를 보고싶을 때
UserDefaults에 저장되어 있는 모든 객체 목록은 key-value 형태로 반환할 수 있는데,
그때는 dictionaryRepresentation 메서드를 사용한다.
// 방법 #1
for (key, value) in UserDefaults.standard.dictionaryRepresentation() {
print("\\(key) = \\(value) \\n")
}
// 방법 #2
_ = UserDefaults.standard.dictionaryRepresentation().map {
print("[UserDefaults_CleandUp]:\\($0.key): \\($0.value)")
}
// 방법 #3
UserDefaults.standard.dictionaryRepresentation().forEach{
print("[UserDefaults_CleandUp]:\\($0.key): \\($0.value)")
}
'Swift, iOS Foundation' 카테고리의 다른 글
[Swift] IBOutlet Collection이란 무엇일까? (0) | 2022.01.09 |
---|---|
[Swift] @IBInspectable, @IBDesignable을 사용해보자 (0) | 2021.12.20 |
[Swift] 함수 앞에 private가 붙어 있던 이유, 접근 제어(Access Control) (0) | 2021.11.08 |
[Swift] 타입캐스팅(Type Casting) 완전 정복하기: is? as as? as! 키워드 내용 정리 (0) | 2021.11.06 |
[Swift] 옵셔널(Optional) 완전 정복하기: 개념부터 옵셔널 바인딩까지 (0) | 2021.08.24 |