안드로이드를 하다보면 rxJava, rxKotlin, rxAndroid 그리고 이 것들을 코루틴(coroutine)으로 대체할 수 있고, 완전히 대체는 못하는데 어쩌고 저쩌고 하는 말을 굉장히 많이 듣습니다.
그러면, 이게 도대체 뭔데? 그리고 왜 쓰는건데? 에 대해서 알아보겠습니다.
일단 RX에 대해서 검색해보면 뭐라고 나오는지 보면 보통 이런 말들을 더럽게 이해 안가게 써놓습니다.
RX는 관찰 가능한 시퀀스를 사용하여 비동기 및 이벤트 기반 프로그래밍을 하기위한 라이브러리다.
observer pattern을 이용하여, 시퀀스를 조합할 수 있게 한다.
low-level Thread 동기화와 Thread 안정성, non-blocking IO에 대한 우려를 줄인다.
여기까지 알아봤을 때 드는 느낌은 비동기 통신이고, 시퀀스를 관리할 수 있다 정도로 감이 옵니다.
자, 그러면 어떻게 사용하는데? 에 대해서 한번 해보겠습니다.
일단은 rxkotlin관련해서 깃허브에 들어가니 아래의 예제가 나옵니다.
위의 예제를 보니 list를 관찰해서 텍스트를 하나씩 가져와서 길이가 5개 미만인(Beta)를 빼고 출력했습니다.
여기까지 보면, 조건을 이것저것 달아서 사용할 수 있구나... 정도로 알 수 있을 것 같습니다.
여기까지 해 보면 아래의 그림이 조금 와닿습니다.
어떤 이벤트들을 그룹화하여 순차적 호출을 시킬 수 있습니다.
자, 그러면 저희가 흔히 사용하는 retrofit을 사용하여 서버와 통신하는 예제를 한번 작성해보겠습니다.
사용하는 api는 googleapis의 books를 사용했습니다.
gradle에 디펜던시 넣어주고
Retrofit 부분 만들어주고
데이터 모델 만들고
서비스 만들고
여기까지 했으면 데이터 불러올 준비는 완료했습니다.
그다음 viewModel에서 데이터를 호출해보도록 하겠습니다.
그리고 MainActivity에서 데이터 호출해주면 끝.
아 그리고 인터넷 퍼미션 체크해주는거 잊지마세용
<uses-permission android:name="android.permission.INTERNET"/>
보너스로 Rx를 하다보면 PublishSubject와 BehavoirSubject 라는 친구를 만납니다.
이 친구들은 liveData와 유사한 녀석인데, 잠깐 publishSubject에 대해서 보면 아래와 같이 나옵니다.
그럼 2개의 차이를 한번 코드로 보겠습니다.
behavoirName 같은 경우에는, subscribe전에 데이터를 확인할 수 있지만, publishName같은 경우에는 subscribe전에 데이터를 읽지 못합니다.
-참조
https://www.youtube.com/watch?v=3-TAwhn7Bcc
https://dev-daddy.tistory.com/26
https://4z7l.github.io/2020/12/01/rxjava-1.html
https://selfish-developer.com/entry/RxJava-Subject-PublishSubject-BehaviorSubject
https://www.youtube.com/watch?v=iv_Qj_xGNRE
https://selfish-developer.com/entry/RxJava-Subject-PublishSubject-BehaviorSubject
'Android(Kotlin)' 카테고리의 다른 글
DiffUtil (0) | 2021.08.22 |
---|---|
kotlin lateinit lazy (0) | 2021.08.22 |
Android Room (0) | 2021.08.22 |
Execution failed for task ':app:kaptDebugKotlin' (0) | 2021.08.21 |
간단한 Android Network 연결 상태 체크 (0) | 2021.08.20 |