ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • LiveData와 Flow: Android UI 데이터 관찰의 두 가지 접근 방식 비교
    Android 2024. 11. 26. 11:06
    // LiveData
    isViewVisible.asLiveData().observe(viewLifecycleOwner) { isVisible ->
    	// ...
    }
    
    // Flow
    isViewVisible.collect { isVisible ->
    	// ...
    }

    두 코드 스니펫은 `isViewVisible`이라는 상태를 관찰하여 UI를 업데이트하는 방식에서 차이가 있습니다. 이 두 가지 접근 방식의 주요 차이점은 다음과 같습니다.

    1. `asLiveData().observe()` 사용:
      1. LiveData: Android의 생명주기 인식 데이터 홀더 클래스로, 주로 UI 컴포넌트와 데이터의 동기화를 위해 사용됩니다.
      2. 생명주기 인식: `observe(viewLifecycleOwner)`를 사용하면 관찰자가 `viewLifecycleOwner`의 생명주기를 따릅니다. 즉, 해당 UI 컴포넌트가 활성 상태일 때만 업데이트를 받습니다. 이는 메모리 누수 및 불필요한 업데이트를 방지하는 데 유용합니다.
      3. 주로 UI 레이어에서 사용: `LiveData`는 주로 ViewModel과 UI 간의 데이터 바인딩에 사용됩니다.
    2. `collect` 사용
      1. Flow: Kotlin Coroutines의 비동기 데이터 스트림으로, 데이터의 비동기적 스트림을 처리할 수 있습니다.
      2. 수동 수명 관리: `collect`는 생명주기를 자동으로 인식하지 않으므로, 수동으로 수명을 관리해야 합니다. 예를 들어, `lifecycleScope.launch`와 같은 코루틴 스코프 내에서 사용해야 합니다.
      3. 비동기 데이터 처리: `Flow`는 비동기 데이터 처리에 강력하며, 데이터가 비동기적으로 발생할 때 적합합니다.

    요약

    • `asLiveData().observe()`: 생명주기 인식이 필요하고, 주로 UI와 직접적으로 연결된 데이터 바인딩에 적합합니다.
    • `collect`: 비동기 데이터 스트림을 처리할 때 유용하며, 생명주기 관리를 직접 해야 합니다.
    • 두 접근 방식은 각각의 장단점이 있으며, 사용하는 상황에 따라 적합한 방법을 선택하면 됩니다. `LiveData`는 UI 생명주기와 밀접한 반면, `Flow`는 더 유연하고 강력한 비동기 처리 기능을 제공합니다.
Designed by Tistory.