티스토리 뷰

반응형

RxJava,  RxSwift, RxAndroid 등 Rx라는 단어를 많이 들어봤을 것입니다. Rx는 무엇일까요?



Rx은 무엇인가?

 'Reactive Extensions'이며 'ReactiveX'라고도 불립니다. 

이벤트를 이벤트 스트림에 전달하고, 이벤트 스트림을 관찰하다가 원하는 이벤트를 감지하면 이에 따른 동작을 수행합니다. 비동기 라이브러리로 반응하는 프로그램이라고하여 Reactive Programming으로 부릅니다.


RxJava 버전

1.x 버전

   2017년 6월 1일 기준으로 새로운 기능 추가 없이 버그만 수정되고 있습니다.

   June 1, 2017 - feature freeze (no new operators), only bugfixes

2.x 버전

   1.x 버전의 설계상 문제를 개선한 버전으로 지속적으로 업데이트 되고 있습니다.


옵서버블과 옵서버

RxJava을 사용 한다면 옵서버블과 옵서버에 대한 개념을 알고있어야 합니다.


■ 옵서버블(Observable)

"이벤트"를 만들어 내는(emit) 주체로, "이벤트 스트림"을 통해 만든 이벤트를 보냅니다. 한개부터 여러개까지 생성 가능하며, 특정 조건을 만족 시 이벤트를 만들어 내지 않을 수도 있으며, 유지하여 계속해서 이벤트를 만들 수도 있습니다.

■ 옵서버(Observer)

옵서버블에 만들어진 이벤트에 "반응(react)"합니다. 이벤트를 받았을 때 수행할 작업을 정의합니다. 반응을 하기 위해서 지속적으로 옵서버블을 관찰해야하는데 이를 '옵서버가 옵서버블을 "구독(subscribe)"다'라고 표현합니다.




연산자, 스케줄러

Rx에서 연산자, 스케줄러라는 개념이 있습니다.

● 연산자 체인

거의 모든 연산자들은 Observable 상에서 동작하고 Observable을 리턴합니다. 이 접근 방법은 연산자들을 연달아 호출 할 수 있는 연산자 체인을 제공합니다. 연산자 체인에서 각각의 연산자는 이전 연산자가 리턴한 Observable을 기반으로 동작하며 동작에 따라 Observable을 변경합니다. Observable의 연산자 체인은 원본 Observable과 독립적으로 실행될 수 없고 순서대로 실행되어야 한다

■ 연산자(Operators)

이벤트 스트림을 통해 전달되는 이벤트를 변환 합니다. 갖고있는 값 변경 뿐 아니라 특정 조건을 만족하는 이벤트만 이벤트 스트림에 흘려 보내거나 이벤트 개수를 바꿔주는 등 다양한 작업을 수행할 수 있습니다.


[연산자 filter 예시]




Rx에서 제공하는 Operators 를 확인하려면 여기 를 눌러주세요. 한국어로 번역도 되어 있네요.


 스케줄러(Scheduler)

스케줄러(Scheduler)는 작업을 수행할 스레드(thread)를 지정 합니다. 다양한 스레드를 지정할 수 있으며 Android에서 UI 업데이트하는 메인 스레드도 사용 가능합니다. 스케줄러는 observeOn() 메서드를 사용하여 지정합니다. 


[스케줄러 호출 시점]

1) observeOn() 메서드 호출한 직후에 오는 연산자 

2) 옵서버에서 수행되는 작업 앞의 observeOn() 메서드에서 지정한 스레드



디스포저블(Disposable)

옵서버가 옵서버블을 구독할 때 생성되는 객체로, 옵서버블에서 만드는 이벤트 스트림과 이에 필요한 리소스를 관리합니다. 한가지 예로써 구독 해제(unsubscribe)을 말할 수 있습니다.  디스포저블을 통하여 구독 해제한 경우 옵서버블은 이를 감지하여 유지하고 있던 리소스를 해제합니다.



컴포지트 디스포저블(Composite Disposable)

Composite Disposable을 사용하여 여러 개의 디스포저블 객체를 하나의 객체에서 사용 가능합니다. Android에서 View에 해당되는 액티비티나 프래그먼트에서 사용한다면 리소스 관리에 도움이 될 것입니다.


Q. 안드로이드에서는 Rx을 사용하는가?

1. RxJava인 경우 비동기 이벤트를 쉽게 처리할 수 있습니다.

   비동기 작업을 할 경우 AsyncTask 또는 interface로 처리를 합니다. 하지만 코드의 양도 많고 복잡하여 사용하는데 어려움을 단 몇 줄로 이 문제를 해결해 줍니다.


2. 다수의 비동기 처리를 쉽게 할 수 있습니다.

  1개 이상의 비동기 작업을 동시에 처리할 때 모든 비동기 처리가 완료될 때까지 대기하는 로직을 구현 시 쉽게 처리 할 수 있습니다. (페이스북의 내 개인 정보, 내 사진첩, 친구목록 등 정보를 가져오는 페이지 작성 시)


3. 이벤트나 데이터를 쉽게 가공 및 분해할 수 있습니다.

   다양한 조건에 대응하는 동작을 새로운 이벤트를 만드는 과정을 통해 간편하게 구현할 수 있습니다.




정리

Rx에 대한 내용을 해당 사이트와 도서를 통해 정리하였습니다. 자세한 내용은 참조에 표시한 사이트와 도서를 보시면 이해하는데 도움이 될 것입니다. 다음 포스트에서는 소스코드에서 사용하는 방법에 대해서 공유 하겠습니다. 



[RxJava] RxJava와 RxAndroid [2 / 2]



참조


반응형
댓글