Android Jetpack/Datastore

    [Android Datastore] 5. Shared Preferences를 Datastore로 Migration하기

    Shared Preferences와 Datastore Shared Preferences를 Datastore로 Migration 하기 위해서는 Datastore가 저장되는 공간에 Shared Preferences가 저장했던 정보를 다시 저장해야 한다. 이 뜻은 Shared Preferences를 Datastore로 이전 저장하기 위해 Migration 용 스펙을 정의해놓은 객체가 필요하다는 뜻이다. Shared Preferences를 Datastore로 이전하는 작업은 보통 두가지 상황의 경우에 고려된다. 첫 째, Shared Preferences가 새로 만들 Datastore과 Dependency가 있어 같이 작업하는 것이 좋은 경우. 둘 째, Datastore에서 제공하는 Coroutines, Flow..

    [Android Datastore] 4. Proto Datastore 사용 방법 한 번에 정리하기

    환경세팅 안드로이드에서 Proto Datastore을 사용하기 위해서는 Type Safety를 위한 처리를 해주어야 하기 때문에 Preference Datastore보다 복잡하다. Gradle 파일 세팅 1. 모듈 수준의 gradle 파일에 플러그인을 추가한다. plugins { .. id("com.google.protobuf") version "0.8.17" } 2. 모듈 수준의 gradle에 라이브러리를 추가한다. 하나는 datastore 라이브러리이고 다른 하나는 protocol buffer을 위한 java 라이브러리이다. dependencies { .. implementation("androidx.datastore:datastore:1.0.0") implementation("com.google.p..

    [Android Datastore] 3. Proto Datastore 이란 무엇인가?

    Proto Datastore이란 무엇인가? public interface DataStore { public val data: Flow public suspend fun updateData(transform: suspend (t: T) -> T): T } Proto Datastore은 DataStore 인터페이스를 구현하는, 간단한 데이터를 key-value 쌍으로 저장하기 위한 데이터 저장소 솔루션이다. 이전 SharedPreference나 Preference Datastore과는 달리 저장되는 데이터의 Type Safety를 보장한다는 점이 큰 장점이다. 따라서 Primitive Type이나 간단한 Collection 타입의 저장만이 지원되는 SharedPreference나 Preference Data..

    [Android Datastore] 2. Preference Datastore 사용 방법 한 번에 정리하기

    Preference Datastore이란? public interface DataStore { public val data: Flow public suspend fun updateData(transform: suspend (t: T) -> T): T } Preference Datastore이란 DataStore 인터페이스를 구현하는 구현체로 Android에서 간단한 데이터를 key-value 쌍으로 저장하기 위해 사용하는 라이브러리이다. SharedPreference와 같이 Type Safety를 제공하지 않는 데이터 저장소 솔루션이다. Type Safety을 제공하지 않아 데이터 저장소에서 꺼낸 데이터에 대해 타입을 잘못 지정한다면 오류가 발생할 수 있다. 그럼에도 여전히 비동기 작업을 위해 Corou..

    [Android Datastore] 1. Datastore을 사용해야 하는 이유 : SharedPreferences는 왜 대체되어야 하는가?

    SharedPreferences의 한계점 Datastore가 나오기 전까지 안드로이드에서는 가벼운 데이터를 key-value 쌍으로 저장하기 위해 SharedPreferences를 사용했다. SharedPreference는 다양한 한계점이 있었다. SharedPreference는 비동기 작업을 제대로 해주지 않으면 ANR을 발생시킬 수 있으며, 오류가 생길 시 확인이 불가능했으며, 런타임에 예외가 생기면 런타임 애러가 발생해 잘못 사용하면 앱이 강제 종료될 수도 있었다. 또한 strong consistency가 보장되는 api가 없어 다중 스레드 환경에서 다른 결과값이 생길 수 있었다. 이러한 문제 외에도 type safety가 보장되지 않아 어떤 데이터가 저장되고 추출되는지를 일일히 데이터로 type ..