본문 바로가기
개발/간단하게...

코루틴에서 Flow가 뭐야?

by lonewhitedot 2023. 5. 1.
반응형

일단 정의 먼저 보면,

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

 

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

 

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야. 간단하지?

반응형

댓글