RxSwfit 장점(1/3) - 비동기/이벤트의 스트림


RxSwift의 장점 중 하나는 비동기와 이벤트가 스트림으로 흐릅니다.

예를 들어 Facebook 같은 앱을 서비스 해야 하는 경우 내 정보 화면에서 필요한 데이터는 총 4가지입니다.

내 개인 정보

내 사진첩

친구 목록

타임라인

토근의 유효성

우리는 자연스러움을 위해 모든 정보가 한 번에 바인딩 되는 것을 원합니다.

다음을 어떻게 처리해야할까요? 


명령형 프로그래밍은 비동기 처리를 하기 위해서는

콜백 지옥

더티플래그

수 많은 if문

...

...

...

다음과 같이 복잡한 형태로 구현을 해야 합니다.


반면에

Rx는 Microsoft에서 "다수의 비동기 이벤트를 처리하기 위해 만들었다" 라고 말할 만큼

Rx는 비동기 이벤트에 있어서 강력합니다. Observable로 처리하면 다음과 같습니다.

유효성 체크를 한 후 4가지 작업을 동시에 처리하는 것입니다.


Router.AuthCheck(token).request()

.flatMap { _ in

return Observable.zip(Router.GetUserInfo(token).request(),

Router.GetTimeline(token).request()) { userinfo, timelines in

return (userinfo, timelines)

}

}

.subscribe(onNext: { data in

let userInfo = data.0

let timelines = data.1

/* .... */

}, onError: { error in

/* .... */

})

.addDisposableTo(rx.disposeBag)

위 코드를 보면 처음에 유효성 체크를 선행 체크 후 flatMap을 통해 Observable을 벗겨냅니다.

Rx Operator 중에 zip이라는 메서드를 이용하여 여러가지 비동기 이벤트들이 한번 묶어서 모든 이벤트가 끝났을 때 값을 가져옵니다.

값을 가져오면 다시 Observable로 만들어서 구독하는 형태로 진행됩니다.

만약 과정 중에 에러가 발생되었다면 onError로 이동됩니다.

결론은 이벤트에서 다른 무언가의 객체로 깔끔하게 넘어갈 수 있다는 것입니다.

flatMap()

 - Observable을 벗겨내는 메서드입니다.

zip()

 - 여러가지 비동기 이벤트들을 한번에 묶어서 처리할 수 있습니다.



RxSwfit 장점(2/3) - 다양한 Operator


RxSwift에는 다양한 Operator들이 존재합니다. (http://reactivex.io/documentation/operators.html)

다음 링크에 가서 여러가지의 Operator들을 확인 후 상황에 맞춰 사용하시면 됩니다.



RxSwfit 장점(3/3) - 편한 Thread 관리


다수의 비동기 이벤트 처리를 해야되는 경우 일반적인 프로그래밍으로 하면 소스가 더러워지고 복잡해집니다.

비동기 이벤트 처리가 많으면 많을수록 더욱 더 난잡 해질 것입니다.

하지만 RxSwift를 이용하면 이러한 비동기 이벤트 처리를 깔끔하고 간결하게 구현할 수 있습니다.



추천및 참고 사이트

http://reactivex.io/  (Reactive 공식 사이트)

https://github.com/RxSwiftCommunity  (RxSwift 커뮤니티 사이트)

http://rxmarbles.com/  (Reactive Function을 시각적으로 표현해주는 사이트)

https://academy.realm.io/kr/posts/reactive-programming-with-rxswift/  (RxSwift 시작하기)



[RxSwift] RxSwift 무엇일까요? (1/2)