[flutter] RxDart의 조합 연산자 종류와 사용법

RxDart는 Flutter 애플리케이션에서 반응형 프로그래밍을 구현하기 위한 강력한 도구입니다. 이 중에서도 조합 연산자는 여러 옵저버블 스트림을 결합하거나 변형하는 데 유용하게 사용됩니다. 이번 블로그 포스트에서는 RxDart의 주요 조합 연산자 종류와 사용법에 대해 알아보겠습니다.

combineLatest

combineLatest 연산자는 여러 개의 옵저버블 스트림을 결합하고, 스트림의 모든 값이 업데이트될 때마다 새로운 값으로 스트림을 발행합니다. 다음은 combineLatest 연산자의 사용 예시입니다.

final stream1 = Stream.fromIterable([1, 2, 3]);
final stream2 = Stream.fromIterable([4, 5, 6]);

final combinedStream = Rx.combineLatest2(stream1, stream2, (int a, int b) => a + b);

combinedStream.listen((result) {
  print(result); // 출력: 5, 7, 9
});

위의 예시에서는 stream1stream2의 값을 합하는 combinedStream을 생성하였습니다. combinedStream을 구독하면, stream1stream2 중 하나라도 값이 업데이트되면 합계를 계산하여 새로운 값을 발행하게 됩니다.

merge

merge 연산자는 여러 개의 옵저버블 스트림을 결합하여 하나의 스트림으로 만들고, 모든 스트림의 값들을 순차적으로 발행합니다. 다음은 merge 연산자의 사용 예시입니다.

final stream1 = Stream.fromIterable([1, 2, 3]);
final stream2 = Stream.fromIterable([4, 5, 6]);

final mergedStream = Rx.merge([stream1, stream2]);

mergedStream.listen((result) {
  print(result); // 출력: 1, 2, 3, 4, 5, 6
});

위의 예시에서는 stream1stream2merge하여 mergedStream을 생성하였습니다. mergedStream을 구독하면, stream1stream2의 값들이 순차적으로 발행됩니다.

zip

zip 연산자는 여러 개의 옵저버블 스트림을 결합하고, 모든 스트림의 값들을 조합하여 새로운 값으로 발행합니다. 다음은 zip 연산자의 사용 예시입니다.

final stream1 = Stream.fromIterable([1, 2, 3]);
final stream2 = Stream.fromIterable([4, 5, 6]);

final zippedStream = Rx.zip2(stream1, stream2, (int a, int b) => '$a$b');

zippedStream.listen((result) {
  print(result); // 출력: "14", "25", "36"
});

위의 예시에서는 stream1stream2의 값을 조합하여 문자열로 변환하는 zippedStream을 생성하였습니다. zippedStream을 구독하면, stream1stream2의 값들이 조합되어 새로운 문자열로 발행됩니다.

RxDart의 조합 연산자는 combineLatest, merge, zip을 비롯해 다양한 종류가 있으며, 이를 잘 사용하면 Flutter 앱에서 더욱 효율적이고 유연한 반응형 프로그래밍을 구현할 수 있습니다. RxDart 공식 문서1에서 자세한 사용법과 다른 조합 연산자를 참고할 수 있습니다.

Happy coding!

참고 자료