카테고리 없음

flatMapFirst, flatMapLatest

ghnn 2025. 8. 20. 16:27

팀원 코드리뷰를 하다가 flatMapLatest라는 오퍼레이터를 처음 알게 돼

“이건 뭐지?” 싶어 공부하게 되었다.

공부를 하다 보니 자연스럽게 flatMapFirst도 같이 알게 되었고,

두 연산자의 동작 방식과 차이를 비교해서 정리해 보게 되었다.


🔍 개념 정리

🔹 flatMapLatest

  • 가장 최근에 들어온 요청만 처리하고,
  • 그 이전 요청은 무시하는 오퍼레이터
  • 흔히 검색창, 실시간 입력 처리, 새로고침 등
  • “최신 상태만 유지하면 되는 상황”에서 사용
input.keyword
    .flatMapLatest { query in
        network.search(query)
    }

 

🔸 flatMapFirst

  • 첫 번째 요청만 처리하고,
  • 그 작업이 끝날 때까지 다른 요청은 무시
  • 버튼 연타 방지, 실수로 여러 번 눌러도 한 번만 처리되면 되는 경우
input.submitTap
    .flatMapFirst {
        api.submitForm()
    }

⚔️ 차이점 비교

 

  • 데이터는 바뀌지 않으며, 한 번만 불러오면 충분한 경우
    → flatMapFirst가 더 명확하고 안전한 선택일 수 있다.
  • 반면, 재시도나 새로고침을 허용하고 싶다면
    → flatMapLatest가 더 유연하게 대응 가능하다.

🧠 배운 점

  • 둘 다 중복 요청 방지라는 공통점을 가지고 있지만,
    어떤 요청을 “중요하게 여길지”에 따라 선택이 완전히 달라진다.
  • flatMapFirst는 처리 중이면 무조건 무시,
    flatMapLatest는 항상 최신 요청만 처리하려는 특성을 가진다.
  • 버튼처럼 정적 데이터에 대한 명확한 단발 요청에는 flatMapFirst
  • 검색창처럼 요청이 자주 바뀌고 최신만 중요하면 flatMapLatest

💬 마무리

이번 고민을 통해 단순히 “요청 하나 보내는 오퍼레이터”가 아니라,

“비동기 흐름에서 어떤 요청이 중요하고 어떤 걸 버릴지”

구체적으로 의식하면서 연산자를 선택해야 한다는 걸 배웠다.