본문으로 건너뛰기
홈
기술
기술 전체
프로그래밍68
컴퓨터 과학63
AI48
웹 개발36
인프라33
데이터31
소프트웨어 공학18
소개
← 목록으로프로그래밍 › 비동기 › 리액티브 프로그래밍

3. RxJava Marble Diagram(마블 다이어그램)

목차

Marble Diagram(마블 다이어그램)

ReactiveX의 문서를 읽다보면 원형 또는 사각형 등의 도형과 화살표가 들어간 그림을 말한다. 주로 Flowable/Observable에서 메서드를 호출할 때 시간경과에 따른 데이터가 어떻게 전달되고 변화되는지를 표현한다.

[Filter Diagram]

filter 메서드는 원본 데이터 중 지정한 조건에 맞는 데이터만 통지하는 메서드로 Flowable과 Observable에 있는 메서드로 둘 다 같은 처리를 수행한다. filter 메서드에서 인자를 받아 데이터를 받을건지 제외할 것인지 판단하는 함수형 인터페이스를 사용하여 결과가 true 인 데이터만 통지를 한다.

filter-diagram.jpeg — Filter diagram

[에러가 발생할 경우]

처리가 정상적으로 끝나지 못하고 중간에 에러를 통지하게 되면 해당 위치에 X표시를 하고 특정에러가 통지된다. 예를들어 onErrorReturnItem 메서드는 Flowable/Observable에 에러가 밸상하면 인자로 전달받은 데이터를 통지해 완료하는 Flowable/Observable을 생성한다.

errorItem-diagram.jpeg

[Zip Diagram]

여러 개의 Flowable/Observable을 사용해 처리하는 다이어 그램으로 Observable에서 데이터를 받아 새로운 데이터를 만들어 통지하는 Flowable/Observable을 생성한다. 원본Flowable/Observable이 여러 개라면 원본Flowable/Observable의 데이터 통지 시점이 각각 다를 수 있는데, zip 메서드는 통지되는 데이터의 순서에 따른다. 즉, 한쪽이 먼저 첫 번째 데이터를 통지해도 다른 한쪽이 첫 번째 데이터를 통지할 때가지 데이터 결과를 통지하지 않고 시점에 맞춰서 생성한다.

zip-diagram.jpeg

마블 다이어그램의 자세한 정보는 아래 사이트를 확인하면 된다.

https://rxmarbles.com/

선, 원, 세로선, X 읽기

마블 다이어그램은 시간에 따른 통지를 그림으로 나타낸다. 가로선은 시간의 흐름, 선 위의 원은 onNext 값, 세로선 |은 onComplete, X는 onError다. 보통 위쪽 선은 원본, 가운데 상자는 연산자, 아래쪽 선은 결과를 뜻한다. 도형 사이의 거리는 대개 개념적인 간격이므로 그림만 보고 실제 밀리초를 계산하면 안 된다.

원본:   --1--2--3--|
filter:     짝수만
결과:   -----2-----|

이 예에서는 1과 3을 통지하지 않을 뿐 원본에서 삭제하지 않는다. 위 그림의 필터 연산자도 조건식이 참인 값만 결과 선에 나타나는 방식으로 읽는다. filter는 값의 타입을 바꾸지 않고 개수만 줄일 수 있다. 타입을 바꾸려면 map을 결합한다.

onErrorReturnItem(-1) 그림에서 X 다음에 대체 값 하나와 완료가 오는 것은 오류가 정상 값 하나로 바뀐 경우다. 원래 오류가 발생한 뒤의 원본 값들이 계속 이어지는 뜻은 아니다. zip 그림은 두 입력의 첫째와 첫째, 둘째와 둘째를 묶는다. 빠른 입력이 먼저 셋째 값까지 내도 느린 입력의 둘째 값이 없으면 두 번째 결과도 아직 만들 수 없다. 어느 쪽이 먼저 완료해 더 이상 짝이 생기지 않으면 결과도 끝난다.

마블 다이어그램은 순서와 신호를 확인하는 데 유용하지만 스레드, 버퍼 크기, 배압 요청량까지 모두 보여 주지는 않는다. interval이나 flatMap을 읽을 때는 그림의 순서와 함께 스케줄러 및 종료 조건을 코드에서 확인한다.

참고: ReactiveX Marble Diagrams, ReactiveX Filter

같은 카테고리의 글