[java] RxJava의 Operators

RxJava는 리액티브 프로그래밍을 위한 자바 라이브러리로, 다양한 Operator들을 제공합니다. Operator는 Observable(데이터를 발행하는 객체)와 Observer(데이터를 구독하는 객체) 사이에서 데이터를 변환하거나 처리하는데 사용됩니다. 이번 포스트에서는 RxJava에서 주로 사용되는 몇 가지 Operators를 살펴보겠습니다.

1. map Operator

map Operator는 Observable에서 발행된 데이터를 변환하는데 사용됩니다. 예를 들어, 정수 값을 받아 각 값을 제곱하여 새로운 정수를 발행하고 싶을 때 map Operator를 사용할 수 있습니다.

Observable<Integer> source = Observable.just(1, 2, 3, 4, 5);
source.map(num -> num * num)
      .subscribe(System.out::println);

위의 예제에서는 1부터 5까지의 정수를 발행하는 Observable을 생성하고, map Operator를 사용하여 각 값을 제곱한 값으로 변환합니다. 그리고 변환된 값을 출력합니다.

2. filter Operator

filter Operator는 Observable에서 발행된 데이터 중에서 조건에 맞는 데이터만을 걸러내는데 사용됩니다. 예를 들어, 짝수만을 발행하고 싶을 때 filter Operator을 사용할 수 있습니다.

Observable<Integer> source = Observable.range(1, 10);
source.filter(num -> num % 2 == 0)
      .subscribe(System.out::println);

위의 예제에서는 1부터 10까지의 정수를 발행하는 Observable을 생성하고, filter Operator를 사용하여 짝수만을 걸러냅니다. 그리고 걸러진 값을 출력합니다.

3. flatMap Operator

flatMap Operator는 Observable에서 발행된 데이터를 다른 Observable로 변환한 후에 다시 하나의 Observable로 합치는데 사용됩니다. 예를 들어, 각 문자열을 단어 단위로 분리한 후에 다시 하나의 Observable로 합치고 싶을 때 flatMap Operator를 사용할 수 있습니다.

Observable<String> source = Observable.just("Hello World", "RxJava Operators");
source.flatMap(str -> Observable.fromArray(str.split(" ")))
      .subscribe(System.out::println);

위의 예제에서는 “Hello World”와 “RxJava Operators” 두 개의 문자열을 발행하는 Observable을 생성하고, flatMap Operator를 사용하여 각 문자열을 단어 단위로 분리합니다. 그리고 분리된 단어들을 출력합니다.

4. zip Operator

zip Operator는 두 개 이상의 Observable을 결합하여 새로운 Observable을 생성하는데 사용됩니다. 해당 Observable들이 순서대로 발행될 때, 각 순서의 데이터를 묶어 새로운 데이터를 생성합니다. 예를 들어, 두 개의 Observable이 각각 1, 2, 3과 “A”, “B”, “C”를 발행할 때 zip Operator를 사용하면 1과 “A”를 묶어 “1A”를 생성합니다.

Observable<Integer> source1 = Observable.just(1, 2, 3);
Observable<String> source2 = Observable.just("A", "B", "C");
Observable.zip(source1, source2, (num, str) -> num + str)
      .subscribe(System.out::println);

위의 예제에서는 1, 2, 3을 발행하는 첫 번째 Observable과 “A”, “B”, “C”를 발행하는 두 번째 Observable을 생성하고, zip Operator를 사용하여 각 순서의 데이터를 묶어 “1A”, “2B”, “3C”를 생성합니다. 그리고 생성된 데이터를 출력합니다.

RxJava는 위에서 소개한 Operators 외에도 다양한 Operators들을 제공하고 있습니다. 필요에 따라 적절한 Operators를 선택하여 리액티브 프로그래밍에 활용할 수 있습니다.

참고: RxJava Documentation