RxJava - flatMap

컴퓨터공부/안드로이드 2019. 11. 30. 15:23 Posted by 아는 개발자


RxJava에는 유용한 함수들이 많지만 그중에서 가장 많이쓰고 쓸모있는 것을 고르라면 나는 flatMap을 고르고 싶다. 시중의 RxJava/RxAndroid 강의에서도 다른 함수와 달리 flatMap을 소개 할 때는 분량을 길게해서 소개하는데 이해하기는 어렵지만 그만큼 쓰임새가 많아서 그런 것 같기도 하다.


1. flatMap




flatMap은 Observable 작업을 여러번 연계해서 사용할 때 사용하는 API다. 그러나 이렇게 추상적인 말로 설명하면 쉽게 와닿지가 않는다. 구체적인 예시를 통해서 살펴보도록 하자.


2. flatMap 예시


네이버 뉴스 페이지에서 특정 기사를 클릭하면 안드로이드 앱에선 기사의 텍스트, 사진 또는 동영상, 좋아요 개수, 댓글 정보 그리고 기사의 광고를 서버로부터 읽어올 것이다. 이때 이 정보들이 하나의 api에서 묶어져 있지 않고 텍스트 api 따로, 사진 동영상 api 따로, 좋아요와 댓글 정보 따로 있다면 각각 api로 호출해서 불러야 할 것이다.


각자 api를 따로 부른 다음 페이지에 표시한다면 굳이 flatMap을 쓸 필요는 없을 것이다. 그런데 기사를 불러오는데 실패한 경우에는 기사의 광고를 보여주지 않는다는 요구사항이 추가 됐거나 또는 클라이언트에서 서버에 한번에 여러 요청을 보내는 것이 부담을 주는 문제가 발생했다고 생각해보자. 이런 경우에는 서버로부터 기사 광고를 불러오는 작업이 기사를 불러온 작업 이후에 시행돼야 할 것이다. 


안드로이드 라이브러리를 이용해서 위 요구사항을 해결한다면 방법은 있긴 할텐데 코드양도 길어지고 신경써야 할 부분도 많아 귀찮을 것이다. 그런데 RxJava를 이용하면 한 줄만 추가하면 된다.


3. flatMap 코드 샘플

repository.getArticleContents("newsid")
    .doOnSuccess { it ->  }
    .flatMap { repository.getArticleAds("newsid", "ownerid")}
    .doOnSuccess { it -> }

위 코드는 getArticleContent 함수로 기사 내용을 읽은 다음에 다시 flatMap 함수에서 getArticleAds 함수에서 기사의 광고 내용을 호출한 코드다. 기사 광고를 flatMap을 통해 호출하게 되면 자동으로 기사 내용을 잘 읽어온 경우에만 호출하게 된다. 이처럼 RxJava를 적재적소에 이용하면 코드의 양이 줄어들고 직관적으로 코드를 짤 수 있게 된다


'컴퓨터공부 > 안드로이드' 카테고리의 다른 글

코틀린 apply, also, let, run, with  (1) 2020.02.09
수직으로 스와이프 가능한 ViewPager 만들기  (1) 2019.12.07
RxJava - flatMap  (0) 2019.11.30
RxJava - Create 함수  (0) 2019.08.11
RxJava - Observable, Observer  (0) 2019.08.10
안드로이드 Loader  (0) 2019.07.15