고차 스트림을 일차 스트림으로 전환하기
비동기 스트림 처리에서 flatten과 switch는 유사한 시그니처를 가지지만 동작 방식이 크게 다릅니다.
flatten은 외부 스트림이 내부 스트림을 생성하면, 내부 스트림을 완전히 소비한 후에야 다음 내부 스트림으로 넘어갑니다.
반면, switch는 외부 스트림이 새로운 내부 스트림을 생성할 때마다 즉시 이전 내부 스트림을 버리고 새 스트림으로 전환합니다.
이로 인해 flatten은 내부 스트림을 순차적으로 완전 소비하는 반면, switch는 최신 내부 스트림만을 계속 소비하는 동적 전환이 가능합니다.
Rust의 futures 크레이트를 활용하면, StreamExt::flatten과 StreamExt::switch를 쉽게 사용할 수 있으며, switch는 UI 리스트 업데이트나 필터링 같이 동적으로 변화하는 데이터 흐름에 적합합니다.
switch 구현은 외부 스트림과 내부 스트림 상태를 관리하며, 외부 스트림이 새 내부 스트림을 생성할 때마다 내부 스트림 상태를 갱신합니다.
이 기능은 Matrix Rust SDK 개발 과정에서 필요에 의해 도입되었으며, 비동기 스트림 처리의 유연성을 크게 향상시켰습니다.
요약하면, flatten은 내부 스트림을 순차적으로 처리하고, switch는 최신 내부 스트림으로 즉시 전환하는 차별화된 스트림 조합자입니다.
