0Pricing
Android Academy · 강의

Flow로 데이터 관찰하기

데이터베이스 변경에 리액티브하게 대응해 보세요.

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

반응형 데이터베이스 읽기

한 번 쿼리하는 대신 Room은 기본 데이터가 변경될 때마다 새로운 값을 내보내는 플로를 반환할 수 있습니다. UI는 자동으로 업데이트됩니다.

DAO에서 플로 반환하기

반환 타입을 Flow<...>로 선언합니다. 이것은 일시 중단 함수가 아니라는 점에 유의하세요.

@Query("SELECT * FROM users ORDER BY name")
fun observeUsers(): Flow<List<User>>

여기서 일시 중단 함수를 사용하지 않는 이유

suspend 함수는 하나의 결과를 반환하고 종료됩니다. 플로는 계속 이어지는 스트림이므로, 스트림 객체를 반환하는 일반 함수이며 시간이 지나면서 수집합니다.

Room이 다시 내보낼 시점을 아는 방법

Room은 쿼리가 접근하는 테이블을 추적합니다. 해당 테이블에 영향을 주는 쓰기 작업이 발생하면 Room은 쿼리를 다시 실행하고 새로운 결과를 플로로 내보냅니다. 이 과정은 자동으로 이루어집니다.

코루틴에서 수집하기

일반적으로 ViewModel의 코루틴 안에서 플로를 수집합니다.

viewModelScope.launch {
    dao.observeUsers().collect { users ->
        _uiState.value = UiState(users)
    }
}

플로 매핑하기

외부에 노출하기 전에 map과 같은 연산자로 스트림을 변환할 수 있습니다.

val names: Flow<List<String>> =
    dao.observeUsers().map { list ->
        list.map { it.name }
    }

StateFlow로 변환하기

stateIn을 사용해 차가운 DAO 플로를 UI용 뜨거운 StateFlow로 변환합니다.

val uiState = dao.observeUsers()
    .map { UiState(it) }
    .stateIn(
        viewModelScope,
        SharingStarted.WhileSubscribed(5000),
        UiState()
    )

Compose에서 수집하기

앞에서 배운 것처럼 화면에서 수명 주기를 인식하는 방식으로 해당 상태를 수집합니다.

@Composable
fun UsersScreen(vm: UserViewModel) {
    val state by vm.uiState
        .collectAsStateWithLifecycle()
    UserList(state.users)
}

전체 반응형 연결

전체 과정을 연결하면 다음과 같습니다.

  • 데이터가 변경되면 Room이 값을 내보냅니다.
  • ViewModel은 stateIn을 통해 UI 상태로 매핑합니다.
  • Compose는 collectAsStateWithLifecycle로 수집합니다.

어디서든 데이터베이스에 쓰기 작업을 수행하면 화면이 자동으로 새로 고쳐집니다.

단일 진실 공급원

이 패턴은 데이터베이스를 단일 진실 공급원으로 만듭니다. UI는 오래된 복사본을 보관하지 않고, 실제로 저장된 내용을 항상 반영합니다.

쓰기 작업이 업데이트를 트리거함

감시 중인 테이블에서 삽입, 업데이트 또는 삭제가 발생하면 플로가 다시 값을 내보냅니다. 따라서 변경 후 목록을 수동으로 새로 고칠 필요가 없습니다.

suspend fun addUser(u: User) = dao.insert(u)
// observeUsers() flow re-emits automatically

빠른 확인

플로로 데이터를 관찰하는 방법에 대한 이해도를 확인해 보세요.

복습

다음 내용을 배웠습니다.

  • Flow를 반환하는 DAO 메서드는 데이터가 변경될 때 값을 다시 내보냅니다.
  • 이 메서드들은 스트림을 반환하는 일반 함수이며, 일시 중단 함수가 아닙니다.
  • stateIn과 collectAsStateWithLifecycle을 사용해 UI를 반응형으로 구동합니다.
  • 데이터베이스가 단일 진실 공급원이 됩니다.

자주 묻는 질문

“Flow로 데이터 관찰하기” 강의는 무료인가요?

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

“Flow로 데이터 관찰하기”에서 뭘 배우나요?

데이터베이스 변경에 리액티브하게 대응해 보세요. 브라우저에서 직접 실행하는 실습 코드로 Android Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

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

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

“Flow로 데이터 관찰하기” 강의는 얼마나 걸리나요?

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

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

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

이 강의의 모든 강의

  1. 엔터티와 DAO
  2. Room 데이터베이스 클래스
  3. 쿼리와 관계
  4. Flow로 데이터 관찰하기
← Android Academy(으)로 돌아가기