https://developer.android.com/topic/libraries/architecture/datastore

 

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/codelabs/android-preferences-datastore#3

 

 

 

참고 https://developer.android.com/topic/libraries/architecture/datastore

 

Datastore  |  Android 개발자  |  Android Developers

Datastore   Android Jetpack의 구성요소. Jetpack Datastore는 프로토콜 버퍼를 사용하여 키-값 쌍 또는 유형이 지정된 객체를 저장할 수 있는 데이터 저장소 솔루션입니다. Datastore는 Kotlin 코루틴 및 Flow를

developer.android.com

'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

+ Recent posts