본문 바로가기

안드로이드/RxAndroid(RxJava)

[RxJava] 반응형 프로그래밍

반응형 프로그래밍(Reactive Programming)

최근 안드로이드 개발자 모집 공고를 보면 우대사항으로 'RxJava 사용 경험'이 많이 존재한다. 리액티브 프로그래밍이랑 기존 명령형(절차형) 프로그래밍과는 달리 데이터와 같은 주변 환경의 변화를 캐치하여 동작하는 프로그래밍 방식이다.

 

반응형 프로그래밍의 예시

반응형 프로그래밍은 모든 데이터를 '스트림(Stream)'으로 처리하며, 하나의 데이터 흐름은 다른 데이터 흐름으로 변형되거나 여러 데이터 흐름이 하나의 흐름으로 변경될 수도 있다.

public void rxFun(){
    PublishSubject<Integer> items = new PublishSubject.create();
    items.onNext(10);
    items.onNext(15);
    items.onNext(18);
    items.onNext(20);
    
    items.filter(item -> item % 10 == 0 )
    	 .subscribe(System.out.println);
         
    items.onNext(30);
    items.onNext(31);
    items.onNext(33);
    items.onNext(40);
}
// Result
30
40

위는 데이터 스트림인 PublishSubject에 onNext를 통해 아이템이 추가되고,

데이터 스트림에서 10의 배수만 출력하는 데이터 스트림으로 변형한 뒤 구독(subscribe)한다.

이후, 데이터 스트림에 30,31,33,40을 추가하면 subscribe에 의해 30,40이 출력된다.

 

 

안드로이드에서 반응형 프로그래밍을 사용하는 이유

동시성 문제, 다중 이벤트 처리, 백그라운드 처리 등의 문제를 해결할 수 있는 테크닉이다. 안드로이드에서 UI를 변경하는 작업은 메인 스레드에서만 가능하다. 따라서, 비동기 작업이 매우 빈번한데 Rx를 이용하면 이러한 작업을 쉽게 처리할 수 있다. 또한, Callback Hell에서 벗어날 수 있다. 다만, 반응형 프로그래밍은 러닝 커브가 높고, 명령형 프로그래밍에 비해 코드를 이해하기가 어렵다. 

 

마블 다이어그램

반응형 프로그래밍을 쉽게 이해하기 위해서 마블 다이어그램을 자주 사용한다. 마블 다이어그램은 반응형 프로그래밍에서 일어나는 비동기적인 데이터 흐름을 시각화한 도표이다.

Reference

  • 아키텍처를 알아야 앱 개발이 보인다.

'안드로이드 > RxAndroid(RxJava)' 카테고리의 다른 글

[RxJava] Scheduler  (0) 2020.12.25
[RxJava] Disposable  (0) 2020.12.22
[RxJava] Cold Observable과 Hot Observable  (0) 2020.12.22
[RxJava] Observable  (0) 2020.12.21