→ 구글에서 설명하는 내용은 아래와 같습니다.
소규모 또는 단순한 데이터 세트를 저장해야 하는 경우가 있을 수 있습니다. 이를 위해 이전에는 SharedPreferences를 사용했지만, 이 API에는 일련의 단점이 있습니다. Jetpack Datastore 라이브러리는 이러한 문제를 해결하고 데이터 저장을 위한 간단하고 더 안전한 비동기 API를 만드는 것을 목표로 합니다. 이 라이브러리에서는 다음의 서로 다른 두 가지 구현을 제공합니다.
- Preferences Datastore
- Proto Datastore
기능 SharedPreferences PreferencesDatastore ProtoDatastore
비동기 API | ✅(변경된 값을 읽는 용도로만, https://developer.android.com/reference/android/content/SharedPreferences.OnSharedPreferenceChangeListener?hl=ko를 통해) | ✅(Flow와 RxJava 2 & 3 Flowable을 통해) | ✅(Flow와 RxJava 2 & 3 Flowable을 통해) |
동기 API | ✅(단, UI 스레드에서 호출하는 것은 안전하지 않음) | ❌ | ❌ |
UI 스레드에서 호출하기에 안전함 | ❌(1) | ✅(작업은 내부에서 Dispatchers.IO로 이동됨) | ✅(작업은 내부에서 Dispatchers.IO로 이동됨) |
오류 신호 전송 가능 | ❌ | ✅ | ✅ |
런타임 예외로부터 안전함 | ❌(2) | ✅ | ✅ |
strong consistency가 보장되는 트랜잭션 API가 있음 | ❌ | ✅ | ✅ |
데이터 이전 처리 | ❌ | ✅ | ✅ |
유형 안전성 | ❌ | ❌ | ✅(https://developers.google.com/protocol-buffers?hl=ko 포함) |
(1) SharedPreferences에는 UI 스레드에서 호출하기에 안전해 보일 수 있지만 실제로는 디스크 I/O 작업을 하는 동기 API가 있습니다. 또한 apply()는 fsync()에서 UI 스레드를 차단합니다. 대기 중인 fsync() 호출은 서비스가 시작되거나 중지될 때마다, 그리고 애플리케이션에서 활동이 시작되거나 중지될 때마다 트리거됩니다. UI 스레드는 apply()에서 예약한 대기 중인 fsync() 호출에서 차단되며 주로 ANR의 소스가 됩니다.
(2) SharedPreferences는 파싱 오류를 런타임 예외로 발생시킵니다.
Preferences Datastore와 Proto Datastore 비교
Preferences Datastore와 Proto Datastore에서는 모두 데이터 저장이 가능하지만 저장 방법이 서로 다릅니다.
- Preference Datastore는 SharedPreferences와 마찬가지로 스키마를 먼저 정의하지 않은 상태에서 키를 기반으로 데이터에 액세스합니다.
- Proto Datastore는 프로토콜 버퍼를 사용하여 스키마를 정의합니다. Protobuf를 사용하기 때문에 강타입(strongly typed) 데이터를 유지할 수 있습니다. 이러한 데이터는 XML 등 다른 유사한 데이터 형식보다 빠르고 작고 간결하며 덜 모호합니다. Proto Datastore를 사용하려면 새로운 직렬화 메커니즘을 배워야 하지만 Proto Datastore의 강타입 이점이 그만한 가치가 있습니다.
Room과 Datastore 비교
부분 업데이트, 참조 무결성 또는 대규모/복잡한 데이터 세트가 필요한 경우에는 Datastore 대신 Room을 사용하는 것이 좋습니다. Datastore는 소규모 또는 단순한 데이터 세트에 적합하며 부분 업데이트나 참조 무결성을 지원하지 않습니다.
'Android > simple data 저장하기' 카테고리의 다른 글
datastore-protobuf 사용하기 (0) | 2023.08.30 |
---|---|
datastore-preferences 사용하기 (0) | 2023.08.30 |
DataStore 란? (0) | 2023.08.30 |
SharedPreferences 사용하기 (0) | 2023.08.29 |
simple data 저장 방법 (0) | 2023.08.29 |