Kotlin : Flow 기초

hjseo-dev·2022년 6월 6일
1

Android

목록 보기
16/18

📍 Flow 란?

데이터 스트림이며 코루틴 상에서 반응형 프로그래밍을 지원하기 위한 구성요소이다

중간에 갱신되는 값을 받아올 수 있도록 함
builder로 생성, suspend를 사용하지 않아도 됨
프로듀서가 비동기적으로 생성, 컨슈머가 소비함

  • Producer : 스트림에 추가되는 데이터를 생산합니다. 코루틴 덕분에 흐름에서 비동기적으로 데이터가 생산될 수도 있습니다.
    flow{} 내부의 emit()를 통해 데이터 생성
  • Intermediary(선택사항) : 중개자는 스트림에 내보내는 각각의 값이나 스트림 자체를 수정할 수 있습니다.
    map을 사용해서 필터링 하여 필요한 데이터만 가져온다
  • Consumer : 스트림의 값을 사용합니다.
    collect 를 사용하여 전달된 데이터를 소비한다 (UI에서 보통 사용)

✏️ Flow vs Livedata

Livedata는 생명주기에 영향을 받음
Coroutine Scope에서 사용, 풍부한 연산자로 유연하게 데이터 변화 가능
안드로이도 의존성에서 자유로움, Cold Stream

-> Sharedflow로 대체!!
두가지 방식의 특징을 가질 수 있음

📍 StateFlow의 등장, Flow의 한계 극복

데이터 저장소 역할과 데이터 스트림까지 할 수 있다. UI에서 StateFlow를 구독하여 UIState를 업데이트 하면 재구성시 다시 요청 할 필요가 없어짐

stateIn 사용하여 변환하기 (세가지 변수)

  • scope : 구독 받을 coroutineScope를 명시
  • stated : 언제 구독 할지 명시함
  • initialValue : 저장될 초기값을 설정
class LocationRepository(
    private val locationDataSource: LocationDataSource,
    private val externalScope: CoroutineScope
) {
    val locations: Flow<Location> = 
        locationDataSource.locationsSource.stateIn(externalScope, WhileSubscribed(), EmptyLocation)
}

참조 : Dev World의 블로그

0개의 댓글