[Kotlin] map, mapLatest, flatMapLatest

chaeny·2024년 12월 21일

각종 Collections는 map, mapLatest, flatMapLatest 등의 map 함수를 가지고 있는데요. 여기서 map은 HashMap의 map보다는 변환(mapping)의 의미라고 보시면 되겠습니다. 겉의 Flow형태는 유지하되 알맹이가 Int 타입에서 Plant타입으로 변환되었죠.

  • 여기서 map은 데이터의 변환을 의미하며, 데이터 스트림에서 사용된다.
  • 구역 번호(Int 타입)가 식물 목록(Plant 타입)으로 변환
  • Flow API에서 데이터를 변환하거나 새로운 스트림을 생성하는 데 사용되는 연산자

map

  • Flow에서 각 데이터 요소를 1:1로 변환, 즉 입력 값 하나를 받아서 출력 값 하나로 변환한다.
  • 입력 값을 변환하지만, Flow의 구조는 그대로 유지한다.
  • 단순 변환

mapLatest

  • 새로운 데이터가 방출되면, 기존 데이터의 처리를 취소하고, 새로운 데이터의 변환을 시작한다.
  • 최신 데이터만 처리

flatMapLatest

  • flatMapLatest는 데이터를 변환하면서, 새로운 데이터 스트림(Flow)을 생성한다
  • 새로운 데이터가 방출되면, 기존 데이터 스트림을 취소하고 새 데이터 스트림으로 전환한다
  • 즉, 기존 스트림을 취소하고, 최신 데이터에 대한 새 스트림을 생성한다
  • 동적 스트림 생성
val searchPlants: LiveData<List<Plant>> = keyWord.flatMapLatest { word ->
    if (word == NO_KEYWORD) {
        plantRepository.getPlants()
    } else {
        plantRepository.getPlantsWithKeyWord(word)
    }
}.asLiveData()

사용자가 빠르게 검색어를 변경하면, 이전 검색어에 대한 처리 작업이 중복될 수 있다. flatMapLatest는 최신 검색어의 데이터 스트림만 활성화하고, 이전 데이터 스트림의 처리를 취소된다. 즉, 검색어가 빠르게 변경되면 이전 검색어의 처리 작업은 취소되고, 현재 검색어에 대한 데이터만 처리된다

0개의 댓글