본문 바로가기

프로그래밍/RxJava

[RxJava-4] 연산자 (Operator)

RxJava 는 just(), fromArray() 와 같은 팩토리 함수를 사용해 Observable 을 생성하고, 연산자(Operator)를 사용하여 데이터를 처리합니다. 팩토리 함수와 연산자를 함께 사용하는 방법을 메서드 체이닝(Method Chaining)이라 하고, 여러 연산자를 잘 사용하면 복잡한 비동기 호출도 간결하게 처리할 수 있습니다.

 

연산자를 잘 사용하기 위해서는 어떤 연산자가 있는지 알아야 합니다. 하지만, 모든 연산자를 다 외울 필요는 없습니다. 대략 이런 기능이 있다는 것만 알고 필요할 때, 책이나 docs 에서 찾아서 적용하면 됩니다.

 

연산자에는 크게 생성 연산자, 변환 연산자, 결합 연산자, 조건 연산자, 수학 연산자가 있습니다. 각각 이름 그대로 Observable 을 생성/변환/결합/조건처리/수학처리 하는 연산자 입니다. 풀어서 설명하면, 하나의 Observable 데이터를 다른 형태로 변환 할 수 있고, 두 개 이상의 Observable 을 결합 할 수 있으며, 조건 처리도 가능합니다.

 

* 생성 연산자

생성 연산자는 Observable 을 생성하는 연산자입니다.

Observable 을 생성하여 데이터 흐름을 만들고, 이 Observable 을 구독(subscribe) 데이터 발행을 기다립니다. 

 

create(), just(), fromArray(), fromInterable(), fromCallable(), interval(), range(), timer(), defer()

 

- just()

just 는 이름 그대로 인자(argument)에 넣은 데이터를 그대로 발행합니다.

Single.just(0)
    .subscribe()

라고 하면 전달인자에 넣은 0만 호출 됩니다. 

 

- create()

just 함수는 데이터를 인자에 넣으면 자동으로 이벤트가 발생하지만, create() 함수는 데이터를 직접 발행해줘야 합니다.

Observable.create<Int> {
    it.onNext(1)
    it.onNext(2)
    it.onNext(3)
    it.onComplete()
}.subscribe()

 

- fromArray(), fromInterable()

위 연산자는 각각 배열(Array)와 이터레이터(Iterator)를 Observable 로 만들 때 사용하는 연산자입니다.

// fromArray
val intArray = arrayOf(1, 2, 3)
Observable.fromArray(intArray)
    .subscribe()
// fromIterable
val iterator = arrayListOf("가", "나", "다")
Observable.fromIterable(iterator)
    .subscribe()

 

- fromCallable()

기존 자바에서 사용하던 Callable 객체를 연동할 때 사용하는 연산자 입니다. fromCallable() 을 사용하면 기존에 사용하던 비동기 코드를 Observable 로 만들어 사용할 수 있습니다.

 

- timer(), defer()

timer() 연산자는 일정 시간 후에 한 개의 데이터를 발행하고 onComplete() 을 호출합니다.

defer() 연산자는 데이터 생성을 구독할 때까지 미루는 연산자입니다. 

 

 

* 변환 연산자