Datastore 라이브러리는 데이터를 비동기적이고 일관성 있게 저장하며 트랜잭션 방식으로 SharedPreferences의 단점을 일부 극복했습니다. 이 페이지는 Kotlin 멀티플랫폼 (KMP) 프로젝트에서 DataStore를 만드는 데 중점을 둡니다. DataStore에 관한 자세한 내용은 DataStore의 기본 문서 및 공식 샘플
종속 항목 설정
DataStore는 버전 1.1.0 이상에서 KMP를 지원합니다.
KMP 프로젝트에서 Datastore를 설정하려면 아티팩트의 종속 항목을 추가하세요.
모듈의 build.gradle.kts
파일에서 다음을 실행합니다.
androidx.datastore:datastore
- DataStore 라이브러리androidx.datastore:datastore-preferences
- Preferences DataStore 라이브러리
DataStore 클래스 정의
공통DataStore
DataStoreFactory
공유 KMP 모듈의 소스입니다. 이러한 클래스를 공통 소스에 배치
모든 타겟 플랫폼에서 공유할 수 있습니다 이때
만들 actual
및 expect
선언
플랫폼별 구현을 제공합니다.
DataStore 인스턴스 만들기
각 플랫폼에서 DataStore 객체를 인스턴스화하는 방법을 정의해야 합니다. 이는 API에서 특정 플랫폼에 있어야 하는 유일한 부분입니다. 파일 시스템 API의 차이로 인해 대체되었습니다.
일반
// shared/src/androidMain/kotlin/createDataStore.kt
/**
* Gets the singleton DataStore instance, creating it if necessary.
*/
fun createDataStore(producePath: () -> String): DataStore<Preferences> =
PreferenceDataStoreFactory.createWithPath(
produceFile = { producePath().toPath() }
)
internal const val dataStoreFileName = "dice.preferences_pb"
Android
DataStore
인스턴스를 만들려면 Context
을
파일 경로를 지정합니다.
// shared/src/androidMain/kotlin/createDataStore.android.kt
fun createDataStore(context: Context): DataStore<Preferences> = createDataStore(
producePath = { context.filesDir.resolve(dataStoreFileName).absolutePath }
)
iOS
DataStore 인스턴스를 만들려면 데이터베이스 경로
// shared/src/iosMain/kotlin/createDataStore.kt
fun createDataStore(): DataStore<Preferences> = createDataStore(
producePath = {
val documentDirectory: NSURL? = NSFileManager.defaultManager.URLForDirectory(
directory = NSDocumentDirectory,
inDomain = NSUserDomainMask,
appropriateForURL = null,
create = false,
error = null,
)
requireNotNull(documentDirectory).path + "/$dataStoreFileName"
}
)