-
Rxjava안드로이드 학습/Android 기술면접 대비 2024. 1. 5. 17:13
RxJava란?
- RxJava란 ReactiveX(Reactive Extension)를 자바로 구현한 라이브러리다.
- RxJava는이벤트 처리 및 비동기 처리의 구성에 최적화된 라이브러리이다.
- RxJava는 반응형 프로그래밍(Reative Programming)을 하기 위해 만들어졌습니다. 그럼 반응형 프로그래밍은 무엇일까부터 시작해야겠습니다.
ReactiveX: ReactiveX는 관찰 가능한(Observable) 스트림을 사용하는 비동기 프로그래밍을 위한 API이다.
반응형 프로그래밍이란?
반응형 프로그래밍(Reactive Programming)이란 주변 환경과 끊임없이 상호 작용을 하는 프로그래밍을 의미한다.
환경이 변하면 이벤트를 받아 동작하도록 만드는 프로그래밍 기법을 말한다.
반응형 프로그램은 외부 요구에 끊임없이 반응하고 처리한다.
명령형 프로그래밍과 반응형 프로그래밍의 차이
- 명령형 프로그래밍은 작성된 코드가 정해진 순서대로 실행되는 방식의 프로그래밍을 의미한다.
- 반응형 프로그래밍은 시간순으로 들어오는 모든 데이터의 흐름을 스트림으로 처리하며, 하나의 데이터 흐름은 다른 데이터 흐름으로 변형되기도 하고, 여러 데이터 흐름이 하나의 데이터 흐름으로 변경될 수도 있다.
예) 기존의 명령형 프로그래밍에서는 a=b+c 에서 a는 b+c의 연산이 끝난 이후에 그 결과를 통해 값이 할당됩니다. 만약 이후에 b나 c의 값이 변하더라도 a에는 영향을 주지 않기 때문에 문제가 생길 수 있습니다. 반면 리액티브 프로그래밍에서는 b나 c의 값이 변동되더라도 b+c 연산을 다시 할 필요 없이 자동으로 업데이트됩니다.
(출처 : https://soohyun6879.tistory.com/123 [코딩기록:티스토리] )
더 좋은 예시 참고: https://haero.tistory.com/15
RX = Observable + Observers + Schedulers
Observable
- 데이터 스트림
- 하나의 스레드에서 다른 스레드로 전달할 데이터를 압축
- 주기적으로 또는 설정에 따라 생애주기 동안 한 번만 데이터를 방출
- 즉, 데이터를 처리하고 다른 구성요소에 전달하는 역할을 함
Observers
- Observable에 의해 방출된 데이터 스트림을 소비
- Observable을 구독(subscribe)하여 방출하는 데이터를 수신할 수 있음
Schedulers
- Observable과 Observers이 실행되어야 할 스레드를 알려줌
왜 RxJava를 배워야 할까?
- 만일 정보를 불러온 후 바로 View들이 정보를 업데이트 시켜야한다면? 이를 위해 등장한 것이 Reactive Programming, 반응형 프로그래밍이다.
- 아마도 개발자들이 동시성 문제, 다중 이벤트 처리 , 백그라운드 스레드 처리 등을 다루면서 많은 문제점을 직면하는데, RxJava는 이에 대한 범용적이고 확실한 해결책을 제시한다.
- RxJava는 데이터를 관찰이 가능하고 데이터를 스트림으로 처리. RxJava는 동시성 문제, 다중 이벤트 처리, 백그라운드 처리 등의 문제를 좀 더 쉽게 해결할 수 있도록 해줍니다.
LiveData와 RxJava의 차이점
- 해지 방법 :
- LiveData는 lifeCyclerOwner의 생명주기를 인식해 started나 resumed 상태가 되어야만 observable한 상태로 변환되어 데이터 변화를 감지하고, destroyed 이후부터는 참조 상태를 자동으로 해지한다는 것을 알 수 있습니다.
- RxJava는 개발자가 직접 등록하고 해제하는 작업을 거쳐야 하기 때문에 번거로운 점이 있습니다.
- 사용 방법 :
- LiveData는 databinding을 통해 간단한 코드의 경우 xml에 직접 등록해 사용할 수 있다.
- RxJava는 거기까지 지원하지는 않는다는 것입니다. 그래서 RxJava의 경우에는 UI 변경 작업도 각 view(fragment or activity) 코드에서 이루어집니다.
RxJava의 경우 러닝커브가 매우 큰 편이지만, 큰 러닝커브만큼 지원해주는 기능들이 많습니다. 반대로 LiveData는 그 사용법이 간단한 만큼, 기본적으로 제공해주는 기능에 한계가 존재합니다. 특히 RxJava는 실행 과정에서 subscribeOn이나 observeOn를 통해 어떤 쓰레드에서 실행될 지 결정할 수 있습니다. 하지만 LiveData는 observe 코드 내부에서 직접 코루틴이나 쓰레드를 변경해서 작성해주어야 합니다.
결론 :
- 간단한 로직과 UI 작업은 LiveData를 이용하고 복잡한 비즈니스 로직은 RxJava를 이용하는 것처럼, 두 개의 라이브러리를 적절히 혼용하여 사용하면 더 빠르고 읽기 쉬우며 간단하게 코드를 작성할 수 있을 것 같습니다.
!!! 사용법은 나중에 정리 예정 !!!
'안드로이드 학습 > Android 기술면접 대비' 카테고리의 다른 글
Activity and Activity LifeCycle (생명주기) (0) 2024.01.08 Activity와 Fragment의 차이점 및 사용 이유 (1) 2024.01.08 안드로이드 4대 컴포넌트 (0) 2023.08.13 Intent (인텐트) 와 Bundle (0) 2023.07.11 AAC - Databinding (0) 2023.06.21