SharedPreferences
SharedPreferences 는 키-값 의 데이터를 저장하기 위해 사용합니다. 이때, 저장은 File 에 이루어집니다.
File 에 저장을 하고 읽는 다는 것은, 데이터를 유지할 수 있다는 것을 의미합니다.
저는 "앱 사용자설정" 등의 설정값들을 저장하기 위해 많이 사용합니다.
DataStore
DataStore 도 키-값 의 데이터를 저장하기 위해 사용합니다. 역시나 저장은 File 에 이루어집니다.
그렇다면 왜 DataStore 를 사용하는 것이 더 좋을까요?
(반대의견이 있을 수도 있다고... 생각...합니다만.. 일단 작성해보겠습니다.)
1. DataStore 는 코틀린 코루틴을 사용한 Flow 를 사용하여 비동기적으로 저장됩니다.
(SharedPreferences 는 읽는 용도로 사용될때 비동기를 지원하였습니다.)
2. DataStore 는 내부적으로 DisPatchers.IO 로 동작하고 있기 때문에 MainThread 로부터 안전합니다.
위 두 내용만 본다면, 음... 그다지.. 그냥 기존에 쓰던걸 쓰면 안되나? 그게 더 편할듯.. 이라고 생각하실 수 있습니다.
Preferences DataStore vs Proto DataStore
Preferences DataStore
- 위에 말한 두가지의 장점을 포함하여 SharedPreferences 보다 몇가지 개선된 점을 갖고 있는 DataStore 입니다.
Proto DataStore
- 이것이 진짜입니다.
1. Protocol buffers 를 이용하여 객체를 저장할 수 있다.
(Preferences 는 객체를 저장할 수 없기 때문에 직렬화와 역직렬화를 위해 번거로운 작업이 있었습니다.)
2. 타입안전성을 제공합니다.
Preferences DataStore 역시 타입에 대한 안전성을 제공하지는 않았습니다. 그러나, Proto DataStore 는, 1번에 작성 된 것처럼
Protocol buffers 를 사용하기 때문에 타입에 대한 안전성을 제공합니다.
3. Key 를 사용할 필요가 없습니다.
Proto DataStore 는 지정되어있는 타입을 인식하고 제공하기 때문에 Key 를 사용할 필요가 없습니다.
SharedPreferences VS PreferencesDataStore vs ProtoDataStore
참고 https://developer.android.com/topic/libraries/architecture/datastore
'BackUp (관리중지) > Android 이론' 카테고리의 다른 글
Android CodeLab [Compose 개요] (2) | 2022.11.12 |
---|---|
Android Service (0) | 2021.05.14 |
Android Coroutine [코루틴] (0) | 2021.05.04 |
[Android Jetpack] LiveData란, (0) | 2021.04.21 |
Fragment 와 Fragment LifeCycle 분석 (0) | 2021.04.19 |