[flutter] RxDart의 필터링 연산자 종류와 사용법

RxDart는 리액티브 프로그래밍을 위한 라이브러리로, 여러 가지 필터링 연산자를 제공합니다. 필터링 연산자는 옵저버블 스트림에서 특정 조건을 만족하는 값만을 선택하는 데 사용됩니다. 이번 글에서는 RxDart에서 제공하는 주요 필터링 연산자 종류와 사용법에 대해 알아보겠습니다.

1. where

where 연산자는 주어진 조건을 만족하는 값만을 내보냅니다. 예를 들어, 숫자 스트림에서 짝수만을 선택하고 싶다면 다음과 같이 사용할 수 있습니다.

import 'package:rxdart/rxdart.dart';

void main() {
  final numbers = Observable.fromIterable([1, 2, 3, 4, 5]);
  
  numbers.where((number) => number % 2 == 0).listen((evenNumber) {
    print('Even number: $evenNumber');
  });
}

위 코드에서 where 연산자는 number % 2 == 0 조건을 만족하는 값(짝수)만을 내보냅니다. 따라서 출력 결과는 다음과 같이 나타납니다.

Even number: 2
Even number: 4

2. distinct

distinct 연산자는 중복되지 않는 값만을 내보냅니다. 예를 들어, 중복된 숫자가 포함된 스트림에서 중복을 제외한 값만을 선택하고 싶다면 다음과 같이 사용할 수 있습니다.

import 'package:rxdart/rxdart.dart';

void main() {
  final numbers = Observable.fromIterable([1, 2, 2, 3, 3, 3, 4, 5]);
  
  numbers.distinct().listen((distinctNumber) {
    print('Distinct number: $distinctNumber');
  });
}

distinct 연산자는 중복되지 않는 값만을 내보내므로, 출력 결과는 다음과 같이 나타납니다.

Distinct number: 1
Distinct number: 2
Distinct number: 3
Distinct number: 4
Distinct number: 5

3. debounce

debounce 연산자는 일정 시간 동안 값이 변경되지 않을 경우에만 가장 최근 값만을 내보냅니다. 주로 사용자 입력 같은 경우에 유용합니다. 일정 시간 동안 입력이 없을 때만 값을 처리하고 싶다면 다음과 같이 사용할 수 있습니다.

import 'package:rxdart/rxdart.dart';

void main() {
  final input = Observable.fromIterable(['a', 'b', 'c', 'd', 'e'])
      .interval(Duration(milliseconds: 500));
  
  input.debounce(Duration(seconds: 1)).listen((value) {
    print('Input: $value');
  });
}

위 코드에서 debounce 연산자는 1초 동안 값이 변경되지 않을 때마다 최신 값만을 내보냅니다. 따라서 출력 결과는 다음과 같이 나타납니다.

Input: e

4. throttle

throttle 연산자는 일정 시간 동안 값이 변경되지 않을 때 가장 최근 값만을 내보냅니다. debounce와는 다르게 입력이 있을 때마다 값을 처리합니다. 예를 들어, 사용자의 스크롤 이벤트를 처리할 때 일정 시간마다 처리할 수 있도록 throttle 연산자를 사용할 수 있습니다.

import 'package:rxdart/rxdart.dart';

void main() {
  final scrollEvents = Observable.just(1)
      .interval(Duration(milliseconds: 100));
  
  scrollEvents.throttle(Duration(milliseconds: 500)).listen((event) {
    print('Scroll event: $event');
  });
}

위 코드에서 throttle 연산자는 500밀리초 동안 값이 변경되지 않을 때마다 최신 값만을 내보냅니다. 따라서 출력 결과는 다음과 같이 나타납니다.

Scroll event: 1
Scroll event: 10
Scroll event: 20
Scroll event: 30
...

지금까지 RxDart에서 제공하는 주요 필터링 연산자 종류와 사용법에 대해 알아보았습니다. 필터링 연산자는 리액티브 프로그래밍에서 값의 조건에 따라 원하는 값만을 선택하는 데 유용하게 사용됩니다. RxDart의 문서와 공식 예제를 참고하면 더 다양한 필터링 연산자를 활용할 수 있습니다.

참고 자료