반응형
Reactive Programming이란?
- 주변환경과 끊임없이 상호작용하면서, 환경이 변하면 이벤트를 받아 동작하는 프로그래밍
- Q. 왜 사용하는가? → 비동기 프로그래밍이랑 밀접한 관련이 있음
- 메인스레드에서 데이터를 불러온다거나, 서버와 통신한다거나 등의 무거운 작업은 별도의 스레드로 분리하여 실행해야함.
즉 처리가 다 될때까지 기다리는것이 아닌 비동기 작업을 해주어야함 - AsyncTask로도 가능하지 않은가? → AsyncTask는 공식적으로 deprecated됨.
- 메인스레드에서 데이터를 불러온다거나, 서버와 통신한다거나 등의 무거운 작업은 별도의 스레드로 분리하여 실행해야함.
- Q. 명령형 프로그래밍과 어떻게 다른가?
- 명령형 프로그래밍은 코드가 작성된 순서대로 실행됟는거고
- 리액티브 프로그래밍은, 데이터의 흐름을 먼저 정의하고
데이터가 변경되었을때 연관되는 함수나 메소드가 그때그때 업데이트되는 방식 - 따라서 손쉬운 비동기 처리가 가능해짐!
- 이 반응형 프로그래밍을 쉽게할 수 있도록 도와주는게 ReactiveX 라이브러리
- 데이터의 흐름을 정의하고, 이걸 감시하여 데이터가 변경되었을때 연관되어있는 함수나 메소드를 호출하는 것이므로 Observable 을 이용하여 이벤트 처리를 하는 라이브러리
- Q. RxJava, RxAndroid, RxKotlin... 등등 많은데 이것들은 어떤 차이가 있는가?
- 차이가 거의 없음. Rxjava는 java의 문법을 기반으로 하기때문에 java가 붙은거지, 코틀린에서도 사용이 가능한 라이브러리임 (원래는 kotlin도 java 기반 언어)
- 굳이따지자면 RxKotlin은 Rxjava를 기반으로 하여 코틀린만의 함수형 프로그래밍을 지원하고, RxAndroid는 Rxjava 기반으로 해서 몇가지 클래스를 더 추가하여 안드로이드 앱에서 리액티브 구성요소를 쉽고 편리하게 만들 수 있는 라이브러리
- Q. 공통점은?
- 비동기 처리를 쉽게할 수 있도록 도와주는 라이브러리
- Observer Pattern을 사용함
- 콜백 지옥에서 벗어날 수 있음 (왜냐 얘가 관찰을 해서 알아서 바꿔주니까!)
- 기존에 retrofit을 사용할때 콜백 인터페이스를 통해 onFailure, onResponse로 통신 결과를 전달 받는 콜백을 사용했다면 이걸 쓰지 않고도 비동기 처리가 가능함!!
- Q. 이와 유사하게 MVVM의 LiveData가 있는것 같은데(Observer Pattern, 모델의 변화 감시 면에서), 이거랑 어떻게 다른지?
- https://stackoverflow.com/questions/46312937/when-to-use-rxjava-in-android-and-when-to-use-livedata-from-android-architectura
- 해당 글을 참고해보면 다양한 사람들의 의견을 들을 수 있음!
- Q. Rxjava와 Coroutine 둘다 비동기 처리 라이브러린데, 어떤 것을 쓰는게 더 좋을까?
- https://wooooooak.github.io/kotlin/2019/08/25/%EC%BD%94%ED%8B%80%EB%A6%B0-%EC%BD%94%EB%A3%A8%ED%8B%B4-%EA%B0%9C%EB%85%90-%EC%9D%B5%ED%9E%88%EA%B8%B0/
- Coroutine과, Rxjava에 비해서 가지는 경쟁력에 대해 정말 잘 설명해주신 분이 계셔서 가져와봤다.
- https://github.com/android
구글에서도 안드로이드 예제 프로젝트를 코루틴을 사용하여 설명해주고있다. 아마 코루틴을 팍팍 밀어주고 있는걸 봐선 코루틴을 공부해두면 좋을것같기는 하다. 근데 어렵다.... 여러번 레퍼런스를 봐도 이해를 아직 완전히 못함.
Reference
https://blog.yena.io/studynote/2020/10/11/Android-RxJava(1).html
https://velog.io/@jojo_devstory/Android-RxKotlin-RxAndroid란-Reactive-Programing
https://hwanine.github.io/android/MVVMFinal/
반응형
'Android' 카테고리의 다른 글
[Android] MVVM + Coroutine + Retrofit (0) | 2021.11.03 |
---|---|
[Android] MVVM, LiveData, ViewModel, Databinding 프로젝트에 적용 (0) | 2021.10.19 |
[Android] MVVM / LiveData, ViewModel, Databinding / AAC - 개념 (0) | 2021.10.15 |
[Android/Kotlin] 자주쓰는 Retrofit 인터페이스 정리 (0) | 2021.08.20 |
[Android/Kotlin] TabLayout & Viewpager2 (0) | 2021.08.20 |