Android Studio

[Android] Jetpack Datastore이란?

혁준 2023. 1. 31. 15:35

DataStore는 무엇일까요?

 

우선 공식문서에서는

Jetpack Datastore는 프로토콜 버퍼를 사용하여 키-값 쌍 또는 유형이 지정된 객체를 저장할 수 있는 데이터 저장소 솔루션입니다. Datastore는 Kotlin 코루틴 및 Flow를 사용하여 비동기적이고 일관된 트랜잭션 방식으로 데이터를 저장합니다. 

+ 프로토콜 버퍼에 대해 하단에 간단하게 설명 추가하였습니다! 

 

 

위와 같이 DataStore를 정의하고 있습니다. 즉 키(key)와 값(value)을 사용하여 데이터를 저장하고 불러올 수 있는 기능을 수행할 수 있는 것입니다. 

 

key value
data1 DataStoreTest123
data2 Test

예시로 data1 이라는 키를 사용하여 "DataStoreTest123" 이라는 값을 저장한 후, 그 값을 꺼내올 때 data1을 사용해서 값을 가져올 수 있습니다.

 

 

사실 이러한 기능은 SharedPreference를 사용하여 구현을 할 수도 있습니다. 그렇지만 SharedPreference는 UI 스레드를 블로킹하여 ANR을 발생시킬 수도 있으며, strong consistency가 보장되지 않아 다중 스레드 환경에서 안전하지 않으며, type safety가 보장되지 않는다는 단점이 있습니다. 

 

 

반면 DataStore를 사용함으로써 단점이 개선되었습니다.

DataStore는 코루틴을 사용하는데, 이를 통해 동시성  프로그래밍에 최적화된 API를 제공합니다. 

다중 스레드 환경에서 strong consistency를 보장합니다. 

Proto DataStore에 한해서 type safety가 보장됩니다. 

 

위에서 작성한 내용을 보면 DataStore가 다양하게 존재하는 것을 알 수 있습니다. 

DataStore는 Preference DataStore와 Proto DataStore가 존재합니다.

 

 

이 둘의 차이점을 설명하기에 좋은 자료가 있어 가져왔습니다.  ( SharedPreference도 함께 존재합니다! )

https://kotlinworld.com/342

Preference DataStore와 Proto DataStore의 차이점으로는 위에서 언급한 것처럼 Type Safety가 있음을 확인할 수 있습니다. 

(자신이 개발하는 환경에 맞춰 적절하게 선택하여 개발을 진행하면 좋을 것 같네요..!)

 

 

 

 

 

- 프로토콜 버퍼란? 구조화된 데이터를 이후 버전과 호환되거나 이전 버전과 호환되도록 직렬화하는 기능을 수행합니다. 

 


읽어주셔서 감사합니다.

 

다음 글은 Preference DataStore와 hilt를 함께 사용하여 코드를 작성한 예시글입니다. 흥미가 있으시다면 함께 읽어주세요! 

https://hugjune.tistory.com/58

 

[Android] Preference Datastore와 Hilt 함께 사용하기

Preference Datastore와 Hilt를 함께 사용하는 예제를 찾아보았는데, 예제가 많이 보이지 않아 유튜브를 보고 코드를 작성하였습니다. 이 내용을 블로그에 공유하면 좋을 것 같아 글을 작성하게 되었습

hugjune.tistory.com

 

 

참고자료 

https://developer.android.com/topic/libraries/architecture/datastore?hl=ko 

https://kotlinworld.com/342

 

 

추가적으로 공부할 때 참고하면 좋을 것 같은 자료 

https://github.com/googlecodelabs/android-datastore