Reactive Programming
해당 문서는 여기의 내용을 번역 및 참조한 것입니다.
왜 우리는 비동기적인 작업을 필요로 할까요?
간단한 대답은 바로 이용자 경험을 향상시키기 위해서입니다. 우리들은 애플리케이션을 더 반응성이 뛰어나게 만들고 싶어합니다. 다시 말해 메인 쓰레드를 멈추도록 하지 않고 더 부드러운 이용자 경험을 제공하고 싶어하죠.
메인 쓰레드를 자유롭게 유지하기 위해서는, 비용 소모가 많은 작업들에 대해서는 백그라운드를 통해 처리하도록 할 필요가 있습니다. 또, 무겁고 연산이 복잡한 작업들에 대해서는 서버를 통해 처리해야할 필요가 있죠. 이런 경우에도 네트워크 작업을 위해서 비동기적인 처리가 요구됩니다.
그래서 반응형 프로그래밍은 뭘까요?
반응형 프로그래밍은 데이터의 흐름과 변경의 전파를 중심으로 하는 프로그래밍 패러다임입니다. 이는 정적 또는 동적인 데이터 흐름을 쉽게 표현할 수 있고, 그에 따라 그 아래 놓인 실행 모델이 데이터 흐름을 통해 변경 사항을 자동으로 전파한다는 것을 의미합니다.
쉽게 말해서, 반응형 프로그래밍에서는 한 컴포넌트에 의해 데이터 흐름이 실행되고, 실행 모델이 해당 데이터 변화를 받게끔 등록한 다른 컴포넌트로 변경사항을 전파하도록 합니다.
아래에서는 Rx에서 사용되는 3가지 포인트에 대해 이야기해봅시다.
RX = OBSERVABLE + OBSERVER + SCHEDULERS
-
Observable : Observable은 대단할게 없는 데이터 스트림입니다. 이는 데이터를 한 쓰레드에서 다른 쓰레드로 넘겨질 수 있도록 데이터를 감쌉니다. 이들은 기본적으로 구성에 따라 주기적으로 또는 수명 주기에 한번 데이터를 내보냅니다. 당장에는, 해당 Observable을 일종의 "공급자"라고 생각하시면 됩니다. 이들은 데이터를 다른 컴포넌트에 처리하고 공급합니다.
-
Observers : Observer는 Observable에서 내보낸 데이터 스트림을 소비합니다. Observer는 observer를
subscribeOn()
을 통해 구독하며, Observable가 내보낸 데이터를 전달받습니다. Observable이 데이터 스트림을 내보낼 때마다, 등록된 모든 Observer가onNext()
콜백을 통해 데이터를 넘겨받습니다. 이 시점에서 JSON 응답을 파싱하거나, UI를 업데이트 하는 등의 다양한 작업을 수행할 수 있습니다. 반면 에러가 발생하는 경우에는onError()
콜백을 통해 처리할 수 있습니다. -
Schedulers : 기본적으로 반응형 프로그래밍은 비동기적인 프로그래밍을 위한 것이고, 우리는 쓰레드 관리가 필요합니다. Rx 상에서 Scheduler란 Observable과 Observer에게 어떤 쓰레드를 실행해야 하는지에 대해 알려주는 역할을 합니다.
observeOn()
메서드를 통해 어떤 쓰레드가 observe를 수행해야 하는지에 대해 처리해줄 수 있습니다.
애플리케이션에서 Rx를 사용하는 간단한 3단계

- 데이터 스트림을 내보낼 Observable을 생성
- 해당 데이터를 소비할 Observer를 생성
- 동시성 관리