목록 보기
ViewModel에서 더이상 EventFlow를 사용하지 마세요
프론트엔드

ViewModel에서 더이상 EventFlow를 사용하지 마세요

PRND
PRND
2025년 1월 6일

두줄요약

ViewModel의 1회성 이벤트 전파에 쓰던 EventFlow를 Channel로 바꾸는 방법을 정리했습니다. 구독자 부재와 재수집 상황을 고려해 receiveAsFlow()와 Channel.BUFFERED 사용 이유도 설명했습니다.

핵심 내용

  • 안드로이드 ViewModel의 1회성 이벤트 전파 방식으로 쓰던 EventFlow를 Channel로 대체한 사례
  • 구독자가 없을 때도 이벤트를 보관하고, 한 번 처리된 이벤트는 다시 전달되지 않는 요구사항 정리
  • 발행부는 send에서 emit으로, 수집부는 receiveAsFlow()로 맞추는 단순한 변경 포인트
  • Channel.BUFFERED와 receiveAsFlow()를 사용해야 하는 이유와 주의점 설명

선택 이유

  • EventFlow와 Channel이 요구사항을 충족하는 방식 비교
  • Channel이 별도 구현 없이도 이벤트 보관과 단발성 소비를 처리하는 점

주의할 점

  • Channel 기본값인 RENDEZVOUS에서는 수신자가 없으면 send가 중단될 수 있음
  • trySend는 수신자가 없을 때 이벤트 유실 가능성 존재
  • consumeAsFlow()는 UI의 반복 collect와 맞지 않음

적용해볼 점

  • ViewModel의 이벤트 전파를 SharedFlow 기반 커스텀 구현보다 Channel로 단순화
  • 1개 ViewModel을 1개 UI가 observe하는 구조라면 Channel의 단일 구독자 제약은 큰 문제 없음

다음 읽기

#Android 주제를 다룬 다른 회사 글

Android Kotlin StateFlow 도입기

Kotlin Flow와 StateFlow를 도입한 경험을 바탕으로 LiveData의 한계와 대체 가능성을 정리했습니다. 클린 아키텍처와 생명주기 대응 관점에서 Flow 활용 방법도 살펴봤습니다.

올리브영
올리브영
프론트엔드

댓글 0

댓글을 작성하려면 로그인이 필요합니다.

댓글을 불러오는 중...