안녕하세요. 이번 포스팅에서는 preference를 활용하여 간단한 값 (ex. 로그인, 환경설정)을 저장하는 방법을 포스팅하겠습니다.
로컬에 간단한 데이터 저장하면 먼저 떠오르는 것이 sharedPreference일것입니다. 하지만 안드로이드에서는 DataStore사용을 적극 권장하고있습니다. 그래서 오늘 내용은 Datastore를 사용해보겠습니다. 다만 Datastore는 간단한 값 저장일때만 사용하고 복잡한 DB는 Room을 사용하시면 됩니다!
1. 정의
먼저 gradle에 추가할 종속항목들 입니다.
implementation "androidx.datastore:datastore:$dataStoreVersion"
implementation "androidx.datastore:datastore-preferences:$dataStoreVersion"
kotlin 파일의 최상위 수준에서 인스턴트를 한 번 호출한 후 애플리케이션의 나머지 부분에서는 이 속성을 통해 인스턴트에 액세스합니다. 아래와 같이 선언 후 사용하여 싱글톤을 유지합니다.
val Context.settingDataStore: DataStore<Preferences> by preferencesDataStore(name = "settings")
별도 Object 파일을 만들어 그곳에서 함수들을 작성하여 관리에 용이하도록 합니다. 해당 Object 안에 아래 코드를 추가하여 이제 data 입출력을 위한 함수 작성간에 해당 dataStore 변수를 사용하도록 합니다.
private val settingDataStore by lazy { ApplicationName.instance.settingDataStore }
2. 값 쓰기(Write)
먼저 값을 저장하는 방법입니다. 저장해야할 값의 자료형에 맞춰 함수의 매개변수의 자료형을 지정합니다. 이후 고유 key값을 해당 자료형에 맞는 PreferencesKey 값의 인자로 넣어줍니다. 아래와 같이 여러 자료형의 PreferencesKey 함수들이 있습니다.
@JvmName("intKey")
public fun intPreferencesKey(name: String): Preferences.Key<Int> = Preferences.Key(name)
@JvmName("doubleKey")
public fun doublePreferencesKey(name: String): Preferences.Key<Double> = Preferences.Key(name)
@JvmName("stringKey")
public fun stringPreferencesKey(name: String): Preferences.Key<String> = Preferences.Key(name)
...
runblocking 코드를 통해 동기식으로 사용하였습니다. 이후 싱글톤으로 사용중인 settingDataStore를 사용하여 값을 저장합니다.
fun setPreference(value: value자료형) = runBlocking {
val preferencekey = value자료형PreferencesKey("$KEY")
settingDataStore.edit {
it[preferencekey] = value
}
}
runblocking
3. 값 읽기(Read)
값을 불러오는 방법입니다. read 또한 마찬가지로 runBlocking을 통해서 받아오도록 하였습니다.
key 값은 write 때와 동일한 자료형의 PreferencesKey 값을 넣어야합니다. 그렇게 하여 map을 통해 원하는 객체로 가져오며 최초 값 체크 first()를 통해 초기값을 설정합니다.
fun isPreference(): value자료형 = runBlocking {
val preferenceKey = value자료형PreferencesKey("$KEY")
return@runBlocking settingDataStore.data
.map { it[preferenceKey] }.first() ?: false
// false, "", 0 등 value자료형에 맞춰 초기값
}
위와같이 작성하여 사용하면 설정값 혹은 간단한 값을 저장해두고 사용할 경우 원하는 위치에 아래와 같이 편하게 사용이 가능합니다.
SettingDataStore.get함수()
SettingDataStore.set함수(저장할 값)
이상으로 환경설정, 로그인 값 등 간단한 값들을 저장할때 사용하기 좋은 DataStore 를 알아보았습니다.
출처: https://developer.android.com/topic/libraries/architecture/datastore?hl=ko |
'안드로이드 > androidstudio' 카테고리의 다른 글
[Android] 동적으로 View, Layout 크기, 위치 변경 (LayoutParams) (0) | 2023.10.12 |
---|---|
[Android] NaverMap api 기기 방향 탐지 (0) | 2023.04.21 |
[Android] device 디스플레이 환경설정 크기 변경에 영향 안받기 (0) | 2023.03.05 |
[Android] Kakao Map Marker event(drag, click) (0) | 2022.12.09 |
[Android] livedata의 observe 중첩 상황 (0) | 2022.12.08 |