brunch

You can make anything
by writing

C.S.Lewis

by 이승현 Jun 26. 2017

Reactive Extensions

ReactiveX #01

ReactiveX


#01 ReactiveX


한글로 번역하면 "관측 가능한(Observable) 스트림을 이용한 비동기 프로그래밍 용 API"입니다.


#02 Reactive programming


직접 코딩을 해보고 경험해보면 이해가 가지만, 처음 보면 뭔 말인가 싶습니다.

처음부터 이해하려 하지 말고 기존 코드를 Rx로 바꿔가면서 이해하시기 바랍니다.




The Observer pattern done right


Rx는 Observer 패턴, Iterator 패턴함수형 프로그래밍의 조합입니다.


옵서버 패턴은 객체의 상태 변화를 관찰하는 관찰자들, 즉 옵서버들의 목록을 객체에 등록하여 상태 변화가 있을 때마다 메서드 등을 통해 객체가 직접 목록의 각 옵서버에게 통지하도록 하는 디자인 패턴이다.


#03 Observer pattern


Rx의 옵서버는 Observable이라는 개념을 관찰합니다.

Observable의 상태(하나 또는 연속된 항목) 변화를 관찰하고 이에 반응합니다.

Observable의 개념은 다음에 설명하겠습니다.




반복자 패턴은 반복자를 사용하여 기본 구현을 노출시키지 않고도 컨테이너를 탐색하고 컨테이너 요소에 접근하는 디자인 패턴입니다.


#04 Iterator pattern


엄밀히 말하면 저 동작(Operator) 부분에서 무조건 반복자 패턴을 쓴다는 의미는 아닙니다.

그냥 이해하기 쉽게 하기 위해 그림으로 표현했는데, 비동기식인 옵서버 패턴과 달리 동기식인 반복자 패턴도 이용한다는 의미입니다. 





함수형 프로그래밍은 자료 처리를 수학적 함수의 계산으로 취급하고 상태와 가변 데이터를 멀리하는 프로그래밍 패러다임의 하나이다.



#05 Functional Programming


함수형 프로그래밍이란 어떤 문제를 해결하기 위한 과정이나 공식에 치중하기보다는 이미 만들어진 함수를 활용하는 방식입니다. 다만 무조건 활용하기보다는 함수 자체에 숨겨진 I/O가 없도록 설계해야 합니다.


문제를 해결하기 위해 함수는 input을 받고 output을 리턴하게 되는데, 경우에 따라 input과 output이 숨어 있을 수 있습니다. 이런 경우를 side-cause, side-effect라 부르고 side-cause와 side-effect가 많을수록 버그도 발생활 확률이 높아지게 됩니다.


Rx에서는 filter, flatMap 등 다양한 함수들을 제공하고 있습니다.





#06 Benefits


이를 기반으로 한 Rx를 이용하면 아래와 같은 장점이 있다고 합니다.

일단은 그냥 이런 게 있구나 하고 넘어가세요.


이벤트 스트림 또는 데이터 스트림을 쉽게 생성할 수 있습니다.

쿼리와 같은 연산자로 스트림을 작성하고 변환합니다.

Side effect를 일으킬 수 있는 관찰 가능한 모든 스트림을 구독할 수 있습니다. 




Ubiquitous


Rx는 어디에나 있으며, 모든 것을 의미합니다.


FRONTEND

RxJS를 사용하여 웹 또는 Rx.NET 및 RxJava를 사용하여 모바일에서 UI 이벤트 및 API 응답에 대응할 수 있습니다.


CROSS-PLATFORM

Java, Scala, C#, C ++, JavaScript, Python, Groovy, JRuby 및 여러 곳에 사용할 수 있습니다.


BACKEND

Backend에서도 사용할 수 있습니다.


Backend에서 이용하던 Rx를 나중에 클라이언트에서도 이용할 만큼 여러 곳에서 이용할 수 있습니다.

안드로이드에서는 RxJavaRxAndroid를 이용할 수 있습니다.


#07 Language




Better codebases


Functional

관측 가능한 스트림을 통해 깔끔하게 입력 / 출력 함수를 사용하여 복잡한 프로그램을 피할 수 있습니다.


Less is more

정교하고 복잡한 문제를 몇 줄의 코드로 줄일 수 있습니다.


Async error handling

전통적인 try / catch는 비동기 에러는 처리할 수 없지만 Rx는 비동기 에러도 처리수 있습니다.


Concurrency made easy

낮은 수준의 스레딩, 동기화 및 동시성 문제를 간단하게 추상화할 수 있게 도와줍니다.




Rx for Android


#08 android rx


안드로이드에서도 Rx를 이용할 수 있습니다.

RxJava, RxAndroid 둘 다 v2.x 까지 나왔고 계속해서 업데이트하고 있습니다.

Rx의 여러 장점이 있기에 이용하는 개발자도 계속 늘어나고, 관련 정보나 글들도 많았습니다. 하지만 Rx를 활용하는 부분이나 방법이 다양하기 때문에 명쾌하게 이해하기가 어렵습니다.


저는 Callback 처리가 많고 복잡해지기 쉬운 네트워크 모듈에 RxJava를 이용하기 위해 공부하고 직접 적용해 보고 있습니다.  따라서 제 글 내용이 부족하거나 오류가 있을 수 도 있으니 참고만 해주시기 바랍니다.




http://reactivex.io/




요즘 매일 감탄하면서 Rx를 쓰고 있네요. 좋습니다. 다들 써보세요.

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari