Flow는 비동기 프로그래밍을 위한 API이며 데이터 스트림을 표현하고 비동기 연산을 수행할 때 사용된다.
네트워크 호출, 파일 읽기, 센서 데이터 수집 등과 같은 작업에 유용하다.
결론☝🏻 Flow는 데이터의 시퀀스를 효과적으로 처리하고 다루기 위한 도구로 사용 된다.
더 쉽게 정리하면 비동기 작업을 처리하고 여러 값들을 순차적으로 처리할 수 있는 도구라고 생각할 수 있다.
Flow는 일반적으로 비동기 연산의 결과를 연속적으로 처리하는 데 사용된다.
Flow는 값을 생성하고 소비자가 이 값을 비동기적으로 수신할 수 있도록 해준다.
정리☝🏻 emit 으로 값을 Flow에 추가하고 collect로 해당 값을 비동기적으로 소비하며 처리할 수 있다.
Flow는 코루틴과 함께 사용되며 collect 함수가 실행되면 Flow에서 생성된 값이 전달되어 소비자에게 처리된다.
Flow는 기본적으로 Cold Stream의 특성을 가지고 있어 구독자가 새로운 데이터를 요청할 때마다 데이터를 생산하고 전달한다.
그러나 Flow를 사용하여 Hot Stream도 만들 수 있으며 SharedFlow가 예시 중 하나이다.
Cold Stream은 데이터를 생산하는 측과 소비하는 측 간에 관계가 단방향이다.
생산자가 데이터를 생성하고 소비자는 이를 소비한다.
✨ Cold Stream에서 새로운 데이터가 생산될 때마다 소비자는 처음부터 데이터를 수신한다.
Hot Stream은 데이터를 공유하고 여러 구독자가 하나의 데이터 스트림을 공유하는 방식이다.
데이터가 생산되면 모든 구독자에게 브로드캐스팅된다.
✨ 이미 생산된 데이터에 새로운 구독자가 가입하더라도 가입 시점 이전의 데이터는 수신할 수 없다.
StateFlow는 단일 값을 가지며 그 값이 변경 될 때마다 새로운 값을 방출한다.
주로 UI 상태를 나타내는데 사용되며 화면의 특정 데이터나 상태가 변경될 때마다 UI를 업데이트 하는 데 유용하다.
StateFlow는 MutableStateFlow 클래스로 시작하여 값을 변경할 수 있는 상태를 제공한다.
SharedFlow는 여러 수신자 간에 값을 공유할 수 있는 Flow이다.
값을 방출할 때마다 모든 수신자에게 전달되며 각 수신자는 독립적으로 값을 소비할 수 있다.
SharedFlow는 Cold Flow로 간주되어 수신자가 구독할 때마다 값은 생성되지 않는다.
Cold Flow는 데이터를 생성하기 전에 구독자가 등록되지 않는 한 값을 생성하지 않는 Flow의 특성을 나타낸다.
☝🏻 즉, Cold Flow는 구독자가 등록되어야만 데이터가 생성되고 흐름이 시작된다.
✨ 정리하면, SateFlow와 ShardFlow는 Flow를 확장하여 특정 사용 사례에 적합한 플로우의 변경을 제공한다.
StateFlow는 단일 값을 다루는 데 유용하며, SharedFlow는 여러 수신자 간에 값을 공유하는 데 유용하다.
모두 코루틴과 함께 사용되며, UI 상태 관리나 이벤트 처리에 활용된다.