안녕하세요 점냥입니다 :)
Rx는 데이터를 제어/관리 하는 다양한 Operator를 제공해주고 있고 개발자들은 상황에 알맞은 Operator 들을 골라 데이터 흐름을 생성/ 제어해야 해요. 따라서 Opeators 많이 알아 두는 것이 중요하지만 외울 수 없을 만큼 다양하기 때문에 이번 포스팅에서는 주요 함수들 중 생성 함수에 대해서만 알아볼게요.
RxJava Operators 분류
생성 | just(), fromArray(), fromIterator(), create(), Interval() |
변환 | map(), flatMap(), cancatMap(), switchMap(), reduce(), scan() |
제어 | filter(), take(), skip() |
결합 | zip(), combineLatest() |
Rx에서 제공해주는 함수들은 각 성격에 따라서 분리되어 있어 카테고리 별로 주요한 함수들을 알아두시면 좋아요!!
만약 RxJava의 모든 함수에 대해서 알고 싶다면 공식 링크를 클릭해주세요
just() - 가장 간단한 데이터 흐름 생성 함수
Observable.just("Red", "Blue", "Green")
.subscribe(System.out::println);
출력
>> Red
>> Blue
>> Green
just 함수 매개변수에 단순히 데이터를 나열하는 방식으로 데이터 흐름을 생성하는 함수입니다
하지만 최대 10개의 데이터만 생성이 가능하고 모두 같은 타입이어야 해요
fromArray, fromIterator - 자료구조를 이용하여 데이터 흐름 생성
String[] color = new String[] {"Red", "Blue", "Green"};
Observable.fromArray(color)
.subscribe(System.out::println);
출력
>> Red
>> Blue
>> Green
위 함수들은 Array와 Iterator에 대해서만 언급했지만 fromCallable 등 여러 함수들이 있어서 fromXXX라고 소개되기도 해요.
just와 마찬가지로 자료구조를 이용하여 간단하게 데이터 흐름을 생성할 수 있어요. Iterator는 List<> 인터페이스 자료구조를 이용한 방식입니다.
create - 개발자가 직접 데이터의 흐름을 생성
Observable.create(new ObservableOnSubscribe<Object>() {
@Override
public void subscribe(@NonNull ObservableEmitter<Object> emitter) throws Exception {
emitter.onNext("3");
emitter.onNext(5);
emitter.onComplete();
}
}).subscribe(System.out::println);
출력
>> 3
>> 5
다소 복잡하지만 익숙한 함수들이 보이실 거예요. onNext(), onComplete() 이전 Base Classes를 설명하는 글에서 Observable 흐름의 데이터 구독 이벤트 들입니다.
create() 함수는 개발자들이 직접 onNext(), onError() 등을 호출하는 차이점이 있고, 코드에서 보이듯 데이터의 타입을 달리해도 문제가 없습니다! 다만 필자의 개인적인 의견은 데이터 흐름을 직접 생성하는 것은 Subject를 사용하는 것이 좋아 보여요
Interval - 시간 지연을 이용한 데이터 흐름 생성
Observable.interval(100L, TimeUnit.NANOSECONDS)
.subscribe(System.out::println);
출력 // + 시간
>> 0 100ms
>> 1 200ms
>> 2 300ms
>> 3 400ms
>> ...
Interval은 앞서 소개한 생성 함수들처럼 간단하게 설명은 할 수 없어요. 이 함수부터는 복잡한 함수들을 이해 쉽게 표현해주는 Rx의 마블 다이어그램을 같이 봐요!
Rx의 함수들을 이해하기 위해서는 우선 마블 다이어 그램을 이해해야 해요!
위 그림이 마블 다이어그램입니다. 네모 도형 안에 있는 것이 함수의 표현식이고, 아래로 나오는 화살표가 함수의 결과 값입니다
코드의 출력 결과를 같이 보면 알 수 있는 데 Interval()
함수는 매개변수의 값만큼 데이터가 지연되어서 발행되고, 그 데이터는 0부터 1씩 증가된 데이터가 발행됩니다. 기본적으로 데이터의 개수는 정해지지 않고 무한히 데이터가 생성됩니다.
데이터 0 즉 처음 발행되는 데이터도 매개변수만큼 지연이 발생하는데, Interval 함수 오버 로딩 함수 들 중 첫 번째 데이터 발행 지연 시간 개발자가 지정할 수 있어요.
@CheckReturnValue
@NonNull
@SchedulerSupport(SchedulerSupport.CUSTOM)
public static Observable<Long> interval(long initialDelay, long period, TimeUnit unit, Scheduler scheduler) {
ObjectHelper.requireNonNull(unit, "unit is null");
ObjectHelper.requireNonNull(scheduler, "scheduler is null");
return RxJavaPlugins.onAssembly(new ObservableInterval(Math.max(0L, initialDelay), Math.max(0L, period), unit, scheduler));
}
ex) Obdservable.interval(0L, 100L, ...)
'Language > RxJava' 카테고리의 다른 글
[RxJava] 여러개 Completable 결합 - andThen (0) | 2021.05.06 |
---|---|
[RxJava] Operators - 변환 (0) | 2021.01.24 |
[RxJava] Hot Observable (0) | 2020.11.05 |
[RxJava] BaseClasses (0) | 2020.10.26 |
Hello RxJava, Rx는 왜 사용할까? (3) | 2020.10.17 |