Android Academy · 강의

설정 읽기와 쓰기

사용자 환경설정을 저장하고 관찰해 보세요.

레슨 3/413개 단계

설정 읽기와 쓰기은(는) CoddyKit의 무료 Android Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Android Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Android Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

읽기와 쓰기

키를 정의했다면 핵심 작업은 데이터 흐름을 읽는 것과 edit를 사용해 쓰는 것입니다. 읽기는 반응형으로 이루어지고, 쓰기는 일시 중단 함수로 수행됩니다.

데이터 흐름

dataStore.data는 Flow<Preferences>입니다. 값을 쓸 때마다 흐름이 새로운 Preferences 스냅샷을 내보내므로 수집자는 자동으로 최신 상태를 유지합니다.

val rawData: Flow<Preferences> = dataStore.data

단일 값 매핑하기

대부분의 경우 전체 Preferences 객체가 필요하지는 않습니다. map을 사용해 특정 키 하나를 가져오고 기본값을 적용하세요.

val darkMode: Flow<Boolean> = dataStore.data
    .map { prefs -> prefs[PrefKeys.DARK_MODE] ?: false }

읽기 오류 처리하기

디스크를 읽는 중 IOException이 발생할 수 있습니다. map 앞에 catch를 사용해 빈 환경설정을 내보내고 흐름이 계속 유지되도록 하세요.

val darkMode: Flow<Boolean> = dataStore.data
    .catch { e ->
        if (e is IOException) emit(emptyPreferences())
        else throw e
    }
    .map { it[PrefKeys.DARK_MODE] ?: false }

edit로 쓰기

값을 변경하려면 edit 일시 중단 함수를 호출합니다. 람다 내부에서는 변경 가능한 환경설정 객체를 전달받으므로 여기에 키를 설정하세요. 전체 블록은 하나의 트랜잭션으로 처리됩니다.

suspend fun setDarkMode(enabled: Boolean) {
    dataStore.edit { prefs ->
        prefs[PrefKeys.DARK_MODE] = enabled
    }
}

edit는 일시 중단 함수입니다

edit는 일시 중단되므로 코루틴에서 호출해야 합니다. 일반적으로 뷰 모델에서 viewModelScope.launch 내부에 작성합니다. 이렇게 하면 쓰기 작업이 주 스레드 외부에서 수행됩니다.

fun toggleDarkMode(value: Boolean) {
    viewModelScope.launch {
        repository.setDarkMode(value)
    }
}

여러 키 업데이트하기

하나의 edit 블록에서 여러 키를 설정할 수 있습니다. 키들은 원자적으로 함께 커밋되므로 관찰자는 일부만 변경된 상태를 볼 수 없습니다.

dataStore.edit { prefs ->
    prefs[PrefKeys.USERNAME] = "ada"
    prefs[PrefKeys.DARK_MODE] = true
    prefs[PrefKeys.FONT_SIZE] = 16
}

값 증가시키기

edit 내부에서 현재 값을 읽고 새로운 값을 계산할 수 있습니다. 실행 횟수와 같은 카운터를 다룰 때 유용합니다.

suspend fun incrementLaunchCount() {
    dataStore.edit { prefs ->
        val current = prefs[PrefKeys.LAUNCH_COUNT] ?: 0
        prefs[PrefKeys.LAUNCH_COUNT] = current + 1
    }
}

삭제와 초기화

remove로 단일 키를 삭제하거나 clear로 저장소를 모두 지울 수 있습니다. 두 작업 모두 edit 블록 안에서 수행합니다.

dataStore.edit { prefs ->
    prefs.remove(PrefKeys.USERNAME)
}

dataStore.edit { prefs ->
    prefs.clear()
}

Compose에서 수집하기

컴포저블에서는 collectAsStateWithLifecycle()을 사용해 뷰 모델의 흐름을 상태로 변환하세요. 설정이 변경될 때마다 UI가 다시 구성됩니다.

val darkMode by viewModel.darkMode.collectAsStateWithLifecycle(initial = false)

Switch(
    checked = darkMode,
    onCheckedChange = { viewModel.toggleDarkMode(it) }
)

읽기-수정-쓰기 주기

전체 과정을 연결해 보면 다음과 같습니다. UI가 흐름을 통해 읽고, 사용자가 전환하고, 뷰 모델이 코루틴을 시작해 edit를 호출합니다. DataStore가 쓰기를 수행하면 흐름이 다시 값을 내보내고 UI가 다시 구성됩니다. 처음부터 끝까지 완전한 반응형 흐름입니다.

빠른 확인

읽기와 쓰기를 얼마나 이해했는지 확인해 보세요.

복습

이제 설정을 읽고 쓸 수 있습니다.

  • dataStore.data는 반응형 Flow<Preferences>입니다.
  • map은 단일 값을 추출하고 catch는 입출력 오류를 처리합니다.
  • dataStore.edit { }는 코루틴에서 원자적으로 씁니다.
  • collectAsStateWithLifecycle이 Compose UI를 구동합니다.

다음에는 Proto DataStore로 타입이 지정된 구조화 데이터를 다룹니다.

무료로 시작

AI 튜터와 함께 Kotlin을(를) 배우세요 — 무료

브라우저에서 실제 코드를 작성하고 실행하며, 24/7 AI 튜터로부터 즉각적인 도움을 받고, 웹이나 앱에서 중단한 부분부터 계속 학습하세요.

코스
36
레슨
152

자주 묻는 질문

“설정 읽기와 쓰기” 강의는 무료인가요?

네 — “설정 읽기와 쓰기” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Android Academy 강의 전체를 잠금 해제할 수 있습니다. Android Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“설정 읽기와 쓰기”에서 뭘 배우나요?

사용자 환경설정을 저장하고 관찰해 보세요. 브라우저에서 직접 실행하는 실습 코드로 Android Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Android Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Android Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.

“설정 읽기와 쓰기” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Android Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Android Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. DataStore와 SharedPreferences
  2. Preferences DataStore
  3. 설정 읽기와 쓰기
  4. Proto DataStore
← Android Academy(으)로 돌아가기