본문 바로가기
Android 개발/Retrofit, OKHttp, Moshi, RxAndroid

RxJava (RxAndroid) 의 마블 다이어그램을 이해해보자.

by Developer88 2017. 5. 24.
반응형

RxJava의 공식문서를 보면, 다양한 Operator들을 마블 다이어그램을 중심으로 설명하고 있습니다.


아래의 이미지는 reactivex.io사이트에 나와있는, Observable에 대한 설명인데요.

역시 마블 다이어그램으로 설명되어 있네요.


아무것도 모르는 상태에서 보면, "이게 뭐지?" 싶지만, 하나하나 잘 살펴보면, 이해를 도와주는 좋은 툴이 될 수도 있습니다.

오늘은 이 마블 다이어그램에 대해서 하나하나 뜯어보면서, 정리해 보도록 하겠습니다. 




참고로, RxAndroid의 기본적인 사항에 대한 것은 아래 글을 참조해주세요.

>>> RxAndroid 이해하기 Part1 <<<



1. Observable의 마블 다이어 그램


처음으로 볼 마블다이어 그램은, 위에서 보여드린, Observable의 다이어 그램입니다.

1번에서 다이어그램들의 구성요소들에 대해서 간단히 정리해보고,

2번에서는 실제 Operator들의 다이어그램들을 보면서 알아보도록 하겠습니다.



1-1. Arrow & Items


제일 먼저 상단의 화살표에 대해서 보도록 하겠습니다.



이 화살표는 시간의 흐름을 말하는데요.

직관적으로 알 수 있을 것 같습니다.


그렇다면, 화살표에 걸려있는 다양한 색과 형태의 도형들이 의미하는 것은 무엇일까요?

이것들은 Observable에 의해서 흘러나온 아이템들을 의미합니다.


Observable이라는 끊임없이 흘러나오는 데이터의 Stream들을 각각 표현한 것이죠.


그리고, 화살표의 마지막에 걸쳐있는,

아래와 같은 일자의 선은 Observable이 성공적으로, 완료됬음을 의미합니다.




1-2. DottedLines&Box


이번에는 마블 다이어그램의 가운데에 있는 점선들과 점선들이 지나는 Box에 대해서 알아보도록 할께요.


점 선들은 Observable에 의해 흘러나온 아이템들이, 

Box안에 있는 요소에 의해서 변환되어 진다는 것을 의미합니다.

Transformation 이라고 문서에는 나와있는데요, 이 단어가 더 이해가 빠른 것 같네요.


Flip이라는 메소드에 의해서, 아이템들에 Transform이 가해졌다는 것을 표현하는 것입니다.


하단의 선에 표현된, 뒤집혀진(Flip된) 도형들은,  

Flip을 지나서 변환되서 하단의 시간의 흐름선에 점선으로 변환되서 돌아왔다는 것을 의미합니다.




1-3. X표시


두개의 화살표선 중 하단에 위치하는 선이, transform된 결과를 나타내는 Observable들의 시간의 흐름을 나타내는 데요.


하단 화살표의 맨 우측에 있는 X표시가 의미하는 것은 무엇일까요?

이 X는 비정상적으로 종료된, Error를 의미합니다. 정상적으로 Completed(완료)가 됬을 때에는 1-1의 끝에 소개된 세로 수직선이 표시됩니다.


이 다이어그램에서는, 첫번째 Observable에서 흘러나온 아이템들이 다 변환되기도 전에, Error를 내고 끝나버렸네요.




2. 실제 사례들


위에서 기본적인 마블 다이어그램의 요소들에 대해 정리해 보았구요, 

이제 실제 사례들을 보면서 위의 요소들을 적용해보겠습니다.


2-1. Filter


이것은 사실, 이름만으로도 쉽게 알 수 있는 것이지만, 

마블 다이어그램을 보도록 하겠습니다.


filter를 거쳐서 동그란 아이템들만, 걸려져서 나왔습니다.

마지막의 수직선은 Observable에서 흘러나온 아이템들의 변환이 다 끝났다는 것을 의미하네요.



조금 어려운 것으로 들어가 보겠습니다.



2-2. CombineLatest


CombinLatest는 단어에서, 최근 것(Latest)을 합친다는 의미를 알 수 있는데요.


상단의 두개의 선을 통해서, 두 개의 Observable이 흘러나오는 것을 알 수 있습니다.

두 Observable은 각각 다른 시간에 흘러나오고 있구요.

각각의 아이템들은 combineLatest를 통해서 transform을 한 다는 것도 볼 수 있네요.


주의깊게 봐야하는 것은, 변환되서 하나의 선에 합처진 아이템들의 형태와 시간의 위치인데요.


첫번째 Observable의 아이템들에서는 색만 취하고,

두번째 Observable의 형태에 취한 색을 더해서 변환되어 나오는 것을 알 수 있습니다.


흘러나오는 시점은, 두번째 Observable이 흘러나오면 그 이후를 기점으로,

둘중의 하나가 흘러나올 때 마다, 색과 형태를 취해서 transform되어져서 나오는 것을 알 수 있습니다.


이런 복잡한 경우는 다이어그램이 이해하기가 더 편리하네요.





마지막으로 시간과 관계된, 마블 다이어그램도 보겠습니다



2-3. Interval 


Interval은 인자로 들어온 일정한 시간 간격에 따라서, 정수를 흘려내보내는데요.


아래와 같이 일정 시간 간격을 인자로 받아서, 그 간격마다, 0부터 증가하는 정수를 흘려보내 줍니다.

계속 내보내기 때문에, 세로 수직선이 없는 걸 볼 수 있습니다.






RxJava의 여러가지 Operator들을 잘 활용하기 위해서라도, 기회가 있을 때마다 공식문서의 마블 다이어그램들을 잘 살펴보아야 겠네요~.


728x90

댓글