Observable과 구독자 관계로 많은 워크플로를 구현할 수 있지만, RxJava의 모든 기능은 연산자에 의해 구현된다고 할 수 있다.

연산자는 스트림의 원소를 조정하거나, 스트림 구조 자체를 변경할 수 있다.

그럼 다양한 기본연산자를 알아보자!

Map 연산자

<R> Observable<R> map(Func1<T,R> Func)

위 선언은 func함수가 타입<T>를 타입 <R>로 변환하고, map을 통해 Observable<T>를 Observable<R>로 변환하는 동작을 한다.

하지만 연산자가 복잡한 변환을 수행할때는, 코드상으로 단순히 나타내기 어렵다. 이럴때 사용하는 것이 마블 다이어그램인데, 마블다이어그램은 스트림의 변환을 시각화하여 표현한다.

map연산자를 마블 다이어그램으로 나타내면 다음과 같다.

Untitled

다이어그램을 보면 map을 통해 원소가 하나씩 변환되는 것을 알 수 있다.

따라서 출력 스트림은 입력 스트림과 똑같은 개수의 원소를 가지게 된다.

Filter 연산자

map연산자와 달리 필터는 받은 것 보다 더 적은 수의 원소를 생성할 수도 있다. 아래 그림처럼, 조건부 테스트를 성공적으로 통과한 원소만 재발행한다.

Untitled

Count 연산자

count연산자는 이름 그대로, 입력 스트림의 개수를 발행한다. 하지만, 원본 스트림이 완료될 때 카운트가 발행하므로 스트림이 무한하거나, Count연산자가 완료되지 않은 경우 반환값이 없다.

Untitled

Zip 연산자