RxJava
- RxJava란 반응형 프로그래밍이다. 주변환경과 끊임없이 상호작용하는 프로그래밍 방식이며 환경이 변하면 이벤트를 받아 동작하도록 만드는 프로그래밍 기법이다. 간단한 예시를 통해 명령형 프로그래밍과의 차이를 정리한다.
명령형 예시
반응형 예시
-
PublishSubject라는 Observable형태의 자료형을 사용하여 구현한 반응형 프로그래밍의 예시이다. 이 결과로 출력된 값은 6과 8이다.
-
즉 Observable이라는 것이 이벤트를 받아들이고, 이를 관찰하는 Observer가 존재하는 형태이다. 위의 예시에서는 Int값을 받아들이는 items_rx 라는 Observable이 존재하고 이를 관찰하여 어떠한행동을하는 Observer가 존재하는데, 이 옵저버의 역할을 println으로 지정한 것이다. 이를 Observer가 Observable을 구독한다고 표현하며 Observable.subsribe(Observer)와 같은 형태라고 생각하면 된다.
RxJava의 사용이유?
- 대부분의 사용자들은 앱이 사용자의 요청에 즉시 반응하여 해결되기를 원하며 반응성이 느린 앱은 선호하지 않는다. RxJava는 이러한 작업을 쉽게 해결할 수 있으며 RxJava를 사용하여 구성된 프로그램에 새로운 프로세스가 추가되어야 하는 경우, 큰 리팩토링 없이 쉽게 변경사항을 구현할 수 있다.
마블 다이어그램
- RxJava는 흔히 마블 다이어그램을 사용하여 표현한다.
Observable
- Observable은 크게 3가지 이벤트를 사용하여 동작한다.
- onNext() : 하나의 Observable에서 Observer까지 한번에 하나씩 순차적으로 데이터를 발행한다.
- onComplete() : 데이터 발행이 끝났음을 알리는 완료 이벤트로 이것이 호출되면 더이상 onNext()가 발생하지 않음을 알리는 것이다.
- onError() : 오류가 발생했음을 Observer에게 알린다.
- 이러한 세가지 이벤트 메소드는 Emitter라는 인터페이스에 선언된다. 아래는 옵저버블을 직접 생성하는 예시를 보여준다.
- 예를들어 아래와 같이 순서를 바꾼다면 2는 옵저버에게 전달되지 않는다.
just 연산자
- 해당 아이템을 그대로 발행하는 Observable을 생성한다.
자료구조를 Observable로 변환하기
- fromArray()
- 배열 자료형을 Observable자료형으로 변환한다. 간단하게 Observable.fromArray(배열)과 같은 형태로 변환할 수 있다.
- fromIterable()
- ArrayList, HashSet과 같은 Iterable을 구현한 자료구조 클래스는
Observable.fromIterable()로 변환할 수 있다.
ㅁ 그외에도 fromFuture, fromPublisher, fromCallable등이 있다.