Android 개발/Retrofit, RxJava, RxAndroid, OKHttp

RxJava (RxAndroid)의 Map 과 FlatMap 메소드를 알아보자

Developer88 2017. 2. 17. 00:01
반응형

RxAndroid (RxJava)는 유저들이 다양한 상황에서 쓸 수 있는, 메소드들을 제공해주는데요.

오늘은 그중에서도, Map과 flatMap() 메소드에 대해서 정리해보고자 합니다.


혹시 RxAndroid 가 무엇인지에 대해서, 간단히 보고싶으시다면,

아래의 글을 읽어주세요~.

>>>  RxAndroid 이해하기 Part1 <<<


그러면, Map메소드부터 정리해보겠습니다.


1. Map 메소드


Map메소드는, 기존의 Observable로부터 받아들인 데이터를 새로운 형태로 변형하는데 쓰이는 것인데요.

코드를 작성해보면서 알아보겠습니다.


먼저 from()메소드를 사용해서, 사람들의 이름의 배열을 만들고 이를 Observable로 받아오겠습니다.

그런데, 이번에는 이 데이터를 김이라고 하는 성을 붙이도록 변형을 하도록 하고자 하는데요.

이럴때 사용을 하는 것이, map()메소드입니다.

map메소드에 인자로 String"김"을 더해주는, function을 주고, 변형하도록 합니다.



이 코드를 실행하면 아래와 같이 Observable로 들어갔던, 배열의 데이터들에 "김"이라는 성이 붙어서 나온 것을 볼 수 있습니다.

즉, Map메소드로 데이터를 가공한 것이지요.




2. FlatMap 메소드


그럼 이번엔 Flatmap메소드를 보겠습니다.

우선, FlatMap도 Map이므로, 데이터를 다른 형태로 가공할 수 있습니다.


그런데, FlatMap은 가공한 데이터를 그대로 return하지 않고,

Observable들로 return한 다음, 이것들을 merge해서 다시 Observable로 return 해  줍니다. 

코드를 작성해보면 정리해보겠습니다.


우선은 Observable을 return해주기 위해서, just()라는 메소드를 사용해 보겠습니다.

이후에 flatMap메소드에 인자로 function을 주는데요, return값이 Observable이어야 하므로,

just라는 메소드를 이용해서, s로 들어온 item들에 "정"이라는 성을 붙여서, Observable로 return해 주겠습니다.




위의 코드를 실행해보면 아래와 같은 결과를 볼 수 있는데요.




소스도 한번 열어보겠습니다. 화살표 된 곳의 merge가 보이시나요?

map() 메소드를 사용한 결과 값들을 merge해주고, Return값이 Observable인 것을 알 수 있습니다.



Map과 FlatMap의 눈에 띄는 가장 큰 차이는 역시, Observable로 return하는가 아닌가 인데요.

flatMap은 각각 Observable로 return 되므로, 비동기적으로 return된 Observable에 대해 더욱 유연성을 가질 수 있을 것 같습니다.


728x90