오늘은 AppStorage를 처음 사용해보면서 이전에 알고 있었고 사용했었던 UserDefaults와의 차이 및 특징에 대해서 알아보려고 한다.
먼저 UserDefaults는 이전에 UIKit에서 부터 자주 사용하던 개념이기 때문에 먼저 정리하고 넘어가보자!
UserDefaults는 iOS에서 데이터를 영구적으로 저장하고 읽어오는데 가장 흔하고 쉽게 사용된다.
큰 데이터를 저장할 순 없고 주로 간단한 설정의 저장값 혹은 사용자의 로그인 정보 정도의 값을 저장하는데 쉽게 구현할 수 있기 때문에 자주 사용되었다.
UserDefaults는 주로 Bool, String, Int , Double, Date, Array, Dictionary 등 저장이 가능하고 이 UserDefaults에 데이터를 저장하게 되면 iOS 앱 샌드박스 내 위치한 파일에 데이터가 저장된다. 그렇기 때문에 저장된 데이터는 앱이 재시작 되거나 재부팅되어도 유지된다.
// 값 저장
UserDefaults.standard.set(true, forKey: "isLoggedIn")
// 값 읽기
let isLoggedIn = UserDefaults.standard.bool(forKey: "isLoggedIn")
로그인이 된 상태 등을 저장하기 위해 이렇게 Key:Value 값을 통해 bool 값을 저장하고 이 저장된 bool 값을 활용해 로그인이 된 상태와 안된 상태를 별도로 구현할 수 있게 된다.
https://developer.apple.com/documentation/swiftui/appstorage/
그렇다면 이제 이번에 새로 사용해본 @AppStorage에 대해서 알아보자.
@AppStorage는 SwiftUI에서 도입된 속성 래퍼이다. 이 래퍼는 유저디폴츠를 더욱 간편하게 사용할 수 있도록 감싸는 형태로 제공하고 SwiftUI의 view와 자동으로 바인딩이 된다. @AppStorage를 사용하면 유저디폴츠의 값이 view 상태에 따라 저장된 값이 업데이트 될 수 있다는 뜻이다.
즉 구현되는 로직을 비교해보자면 @State의 래퍼를 사용한 것과 비슷하다고 할 수 있다. 스테이트 래퍼를 사용해 감싼 값은 값이 변하는 것을 추적하고 추적한 값을 업데이트하는 역할이기 때문에 쉽게 생각하면 유저디폴츠를 감싸 더욱 쉽고 편리하게 사용할 수 있게 해준다고 생각하면 된다.
@AppStorage("isLoggedIn") var isLoggedIn: Bool = false
// 뷰에서 사용
if isLoggedIn {
Text("로그인 상태")
} else {
Text("로그아웃 상태")
}
이렇게 꼭 유저디폴츠를 감싸지 않고 변수만 담아 변경되는 값을 유저디폴츠 처럼 저장하는 것도 가능하다.
원래 프로퍼티를 생성하는 과정에 앞에 @AppStorage를 붙이고 그냥 Key값만 넣어주면 아주 쉽게 구현이 가능하다는 점이 장점이었다.
실제로 사용했을때 너무 쉽고 간단해서 이전에 유저디폴츠도 쉬웠지만 더 쉽게 사용가능하며 기능도 확대된 느낌이었기 때문에 아주 좋은 경험이었다.
결론적으로 유저디폴츠와 앱스토리지는 같은 유저디폴츠 기반으로 동작하지만 사용 환경 및 목적에 따라 선택이 가능하다.
SwiftUI에서 상태와 뷰에서의 간단한 바인딩을 원한다면 앱스토리지만을 활용하는것이 효율적이고 앱 전역에서 값을 저장하고 불러와 사용하려면 유저디폴츠가 아주 좋다.
오늘은 두 기능의 차이점을 알아보았다!!
'◽️ Programming > iOS' 카테고리의 다른 글
멀티 쓰레드 환경에서 Race Condition에 대해서 알아보자 (0) | 2024.12.09 |
---|---|
WKWebView를 사용해 웹페이지 가져오기 (1) | 2024.12.02 |
앱 내 데이터 JSON으로 변환하기 (1) | 2024.10.14 |
EventKit을 사용해 디바이스 내 캘린더 접근하기 (0) | 2024.10.11 |
Background Data Fetch 하기 (0) | 2024.10.08 |