android:datastore
datastore
문서의 이전 판입니다!
개요
Android에서 설정 등을 기록하고 불러오는 기능을 말한다. 과거에 shared preference라는 이름으로 제공하던 api가
현재는 Datastore라는 이름으로 변경되었다.
필요한 의존성 파일
datastore api와, lifecycle api가 필요하다. 당음과 같다.
모듈단계의 그래들 파일에 다음의 의존성을 추가한다.
// DataStore // Alternatively - use the following artifact without an Android dependency. implementation("androidx.datastore:datastore-preferences:1.2.0-alpha01") val lifecycle_version = "2.5.1" implementation("androidx.lifecycle:lifecycle-runtime-compose:$lifecycle_version")
Datastore 클래스 Helper 클래스 만들기
1. 소스파일
다음과 같이 헬퍼 클래스를 만들어서 읽기와 쓰기를 한다.
- "DatastoreMemorize.kt"
package com.dklaw.memorize.database import android.content.Context import androidx.datastore.core.DataStore import androidx.datastore.core.IOException import androidx.datastore.preferences.core.Preferences import androidx.datastore.preferences.core.booleanPreferencesKey import androidx.datastore.preferences.core.edit import androidx.datastore.preferences.preferencesDataStore import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.catch import kotlinx.coroutines.flow.map class DataStoreMemorize(private val context : Context) { private val Context.dataStore : DataStore<Preferences> by preferencesDataStore(name = "appPreferences") private val FILTER_ON = booleanPreferencesKey("FilterOn") // string 저장 키값 // Datastore 읽기 // Flow : coroutines.flow import 해야됨 val valueOfFilter : Flow<Boolean> = context.dataStore.data .map {preferences -> preferences[FILTER_ON] ?: false } // Datastore 쓰기 suspend fun setFilterSwitch(switch : Boolean){ context.dataStore.edit { preferences-> preferences[FILTER_ON] = switch } } }
2. 인스턴스 생성하기
“appPreferences”란 이름의 Datastore 인스턴스를 다음과 같이 생성한다. Datastore는 한 앱당 하나의 인스턴스만 싱글톤으로 사용되어야 하므로 호출에 있어서는 굳이 이름이 필요 없을 것이다. 다만, 유지보수 관점에서 기존의 Datastore와는 다른 새로운 Datastore 인스턴스를 만들어야 할 필요도 있을 것이므로 이름은 필요할 것이다.
private val Context.dataStore : DataStore<Preferences> by preferencesDataStore(name = "appPreferences")
3. 키값의 제목 설정하기
Datastore는 [키, 밸류]의 쌍으로 데이터를 저장한다. 이를테면 C#의 Dictionary와 매우 비슷한 구조인 것이다.
즉, 각 키별로 형식이 존재한다. 이를테면 int값을 저장할 때에는 intPreferencesKey라고 하고, boolean값을 저장할 때에는 booleanPreferencesKey라고 한다.
우리는 boolean값을 “FILTER_ON” 이란 이름으로 저장할 것이다. 따라서 다음과 같이 키를 정의하게 된다.
private val FILTER_ON = booleanPreferencesKey("FilterOn") // string 저장 키값
싱글턴으로 만들기
===== 실제 compose내에서 사용하기
android/datastore.1745755420.txt.gz · 마지막으로 수정됨: 2025/04/27 21:03 저자 이거니맨
로그인