오늘은 flapMapLatest를 사용하여 특정 값이 오기를 기다리면서,
값이 들어올 때 특정 코드를 실행하는 방법을 정리해 보자.
물론 Coroutine의 supsend 기능을 이용하면 어렵지 않다.
전역 변수에 들어가는 값에 대해서는 조금 다른 접근이 필요하기 때문이다.
1. 플랫맵최신
이 API는 Kotlin Coroutine의 Flow API입니다.
Flow에서 흘러나오는 데이터 스트림에서 가장 최근 값만 가져오도록 만들어졌습니다.
새로운 가치가 흘러나오면 기존의 흐름은 취소되어야 합니다.

2. 값이 들어올 때까지 대기 구현
flatmapLatest는 가장 최근 값이 들어올 때까지 기다릴 때도 유용합니다.
아래 코드는 itemId 값이 변경되어 입력되었을 때 실행되도록 작성되었습니다.
초기에 잘못된 ID 값으로 초기화된 항목은 MutableStateFlow 유형으로 존재합니다.
itemId 값이 언제 초기화되는지 알 수 없는 경우 다음과 같이 관찰하십시오.
flatMapLatest를 사용하여 최신 값을 기반으로 코드를 실행할 수 있습니다.
초기 값이 다시 유입되는 것을 방지하고 싶다면 아래와 같이 필터 연산자를 추가하면 확실히 방지할 수 있습니다.
private val _itemId = MutableStateFlow<Long>(EMPTY_ID)
val itemId = _itemId.asStateFlow()
val items: Flow<Long> =
itemId.filter { it != EMPTY_ID }
.flatMapLatest { itemId ->
itemRepository.getItem(itemId)
}
값이 들어올 때까지 기다리는 방법은 여러 가지가 있지만
그 중에서도 FlatMapLatest를 사용하는 것이 좋은 방법이라고 생각합니다.
3. 실험적
Kotlin의 Coroutnine에서 널리 사용되고 있음에도 불구하고,
실험적이라고 표시된 API가 있습니다.
그중 하나가 flatMapLatest 입니다.

실제로 널리 사용되는 것으로 알려져 있으며,
API에 큰 변화가 없을 것이라고 생각합니다.

그래도 조심해서 나쁠 건 없어요.
제품 수준에서 적용할 때 주의해야 합니다.
대체 API는 switchMap 입니다.
그러나 API는 현재 사용되지 않습니다.