Android DataStore 완벽 가이드 - SharedPreferences를 대체하는 최신 데이터 저장소

✨ 개요

Jetpack의 DataStore는 SharedPreferences의 대체재로 등장한 최신 데이터 저장 솔루션입니다. 비동기적이고 안전하며, 코루틴(Coroutine)과 Flow 기반의 데이터 처리를 지원합니다. 설정 정보나 간단한 유저 데이터를 저장할 때 강력한 장점을 가집니다.


1. ⚙️ 개념


2. ⚙️ 기본 사용 방법

class UserPreferencesRepository(private val context: Context) {
  // 초기 설정
  private val Context.dataStore: DataStore<Preferences> by preferencesDataStore(name = "user_settings")

  // 키 정의
  object UserPreferencesKeys {
    val USERNAME = stringPreferencesKey("userName")
    val IS_LOGIN = booleanPreferencesKey("isLogin")
  }

  val userData: Flow<Pair<String?, Boolean>> = context.dataStore.data
    .map { prefs ->
      val username = prefs[UserPreferencesKeys.USERNAME]
      val isLoggedIn = prefs[UserPreferencesKeys.IS_LOGIN] ?: false
      username to isLoggedIn
    }

  suspend fun saveUser(username: String, isLoggedIn: Boolean) {
    context.dataStore.edit { prefs ->
      prefs[UserPreferencesKeys.USERNAME] = username
      prefs[UserPreferencesKeys.IS_LOGIN] = isLoggedIn
    }
  }

  suspend fun clearUser() {
    context.dataStore.edit { prefs ->
      prefs.clear()
    }
  }
}

3. 📊 DataStore vs SharedPreferences 비교

항목 SharedPreferences DataStore (Preferences)
API 스타일 동기(Synchronous) 비동기(Asynchronous, Coroutine)
트랜잭션 보장 불안정 안정적
타입 안전성 낮음 (Key-Value 문자열 기반) 높음 (Type-safe Preferences API)
권장 여부 사용 가능하나 최신 앱에선 비권장 Jetpack 권장 방식
백업 가능성 있음 있음
단점 ANR 위험, 데이터 손실 가능성 초기 학습 곡선 존재

4. 🧾 결론



Related Posts