개발/간단하게...

코루틴에서 Flow가 뭐야?

lonewhitedot 2023. 5. 1. 14:53
반응형

일단 정의 먼저 보면,

"코틀린의 플로우는 순차적으로 값을 내보내고 정상적으로 또는 예외로 완료되는 비동기적인 데이터 스트림입니다."

 

정의만 봐도 대충 뭔소린지는 알겠지???

 

rx를 써 봤으면 대충 알텐데...

 

쉽게 설명해서...

 

데이터를 비동기적으로 계속 뿅뿅 하고 쏘는 애다 라고 이해하면 쉬울 것 같아.

 

예를들어 내가 DB가 하나가 있다고 생각해보자.

그래서 그걸 불러와서 쫙 화면 뿌려줬어. 근데 다른 스레드에서 뭔가 작업을 하면서 DB에 추가를 했네? 그럼 view에서 그걸 보고 또 DB에 쿼리하고 하면 귀찮자나.

 

그래서 내가 flow를 하나 만들기로 했어.

데이터가 변경되면, 데이터를 다시 쏴주는거지.

다른 스레드에서 DB가 변경되면 flow에 새로운걸 던지는 식으로.

 

그럼 View에서는 그냥 그 Flow가 날라올때마다? 라는건 좀 이상하기는 한데.. flow의 데이터가 날라올때 마다 뷰를 새로 그리게만 하면 되는거지.

 

구글의 예를 같이 봐 보면, 뷰쪽은 아래처럼만 하면 되는거야.

class LatestNewsViewModel(
    private val newsRepository: NewsRepository
) : ViewModel() {

    init {
        viewModelScope.launch {
            // Trigger the flow and consume its elements using collect
            newsRepository.favoriteLatestNews.collect { favoriteNews ->
                // Update View with the latest favorite news
            }
        }
    }
}

 

봐봐봐

favoriteLatestNews 가 flow인거고... collect 하겠다. 즉 내가 쳐다 보겠다 하면...

 

데이터가 변경될때마다  

{ favoriteNews ->
                // Update View with the latest favorite news
            }

여기가 지속적으로 불리게 되는거지.

 

이거가 코루틴이랑 연동되서... 뭔가 알아서 비동기 처리까지 해주는...

 

그런게 flow야. 간단하지?

반응형