티스토리 뷰

공부

Why use Rx?

Zedd0202 2019. 3. 6. 17:09
반응형

Rx를 시작하기 전에 알아야 할것 - 왜 Reactive Programming?

Reactive Programming : 데이터 흐름과 전달에 관한 프로그래밍 패러다임. 객체지향 프로그래밍이 패러다임이듯이, 리액티브 프로그래밍도 하나의 패러다임이다.


OOP(객체지향 프로그래밍)에는 다형성, 상속 등 여러가지 특징이 있다. Reactive Programming도 특징이 있다.



데이터 흐름을 먼저 정의하고, 데이터가 변경되었을 때, 연관되는 함수나 수식이 업데이트 된다



사실, 리액티브 프로그래밍을 검색해보면 나오는 말이 다 비슷비슷 할 것이다. 

Reactive Programming. 중점적으로 봐야 할 것은 반응형(Reactive) 이다.

어려울것 없다. 그냥 어떤 변화에 반응한다는 것이다!

내가 데이터를 보고있다가, 즉 관찰(Observe)하고 있다가 데이터가 변하면, 반응을 하고, 그 변한 이벤트를 가지고 관련된 업데이트 로직이 수행된다.

SW를 만들면서, 대부분의 경우 비동기 처리를 해야한다. 그 중 한가지 예는, UI에 뿌려줄 데이터를 서버에 요청하고 그것을 받은 뒤, 해당 데이터를 가지고 UI를 업데이트 해야한다.

그럼 우리는 데이터가 정상적으로 도착했다! 라는 사실을 알아야만 한다. 요청은 하고 데이터가 아직 안왔을 수도 있지 않은가 데이터를 다 받고, 그 다음에 UI를 업데이트 해야한다.


다행히 Swift에는 이러한 비동기 처리를 지원하는 API들이 많이 존재한다. 

Callback(Closure), Delegate, Notification

위 코드는 Callback으로 구현한 건데, 데이터를 다 받고 나서, 그제서야 UI를 업데이트 해준다.

만약에 저 데이터에 변경사항이 생긴다고 생각해보자, 그럼 해당 변경사항을 명시해준 뒤, 다시 UI를 업데이트 해야할 것이다. 즉, 내가 명시적으로 UI를 한번 더 업데이트 해줘야 한다는 것이다.

우리가 아까 말한 Reactive Programming이란, 데이터가 변경되면, 저 UI업데이트 로직을 알아서 한다는 것이다. 왜냐? 데이터가 변경되는 것을 관찰(Observe)하고 있기 때문이다.

그럼 조금 더 Reactive하게 저 코드를 바꿔보자.

자. 이제는 데이터의 변경사항을 감지하여 알아서 UI가 업데이트 되게 된다. 우리는 지금 Reactive Programming을 따라 코딩을 한것이다. 짝짝


Why use Rx?



자. 아무런 라이브러리가 없이, Swift만으로 Reactive Programming을 할 수 있다.

그럼 Rx는 뭘까? Rx는 Reactive Extensions -> ReactiveX 의 약어다. Reactive Programming을 손쉽게(?) 해주는, 가능하게 해주는 구현체라고 생각하면 된다.

그러니까, Rx != Reactive Programming 인거다.



자, 대분의 iOS프로젝트에서 Alamofire(네트워킹 라이브러리)를 쓰지않는가? 

지금 자기가 Alamofire를 쓰는 이유를 잠깐 생각해보자.


사실 Alamofire가 없어도 네트워킹은 가능하다. URLSession이라는 API가 iOS에 있기 때문이다. 

Alamofire도 내부구현은 URLSession으로 되어있다.

그럼 왜 쓰지? URLSession을 쓰면 되는데 Alamofire 왜쓰지? 다들 써서?

정답은 간단하다. URLSession으로 짜면 장황하고 긴 코드를, Alamofire를 사용하면 가독성도 좋아지고, 코드의 길이도 짧아진다.

출처 : https://www.raywenderlich.com/35-alamofire-tutorial-getting-started

Request를 만들고, dataTask를 만들고, resume을 명시적으로 해야하고.... 굉장히 코드가 긴 것을 볼 수 있다.


출처 : https://www.raywenderlich.com/35-alamofire-tutorial-getting-started

하지만 Alamofire를 사용함으로써 코드도 줄어들고 훨씬 가독성이 좋아진것을 볼 수 있다.

이것이..!! 이것이 Alamofire를 사용하는 이유이자 모든 라이브러리를 사용하는 이유 일것이다. 내가 길고 장황한 코드를 짜지 않고, 간단한 메소드 호출 하나로 내가 원하는 걸 가능하게 해주는 것. 그것이 우리가 라이브러리를 사용하는 이유이다.

※ 참고로 Alamofire를 무조건 써라! 라는 말은 아니다. "라이브러리"라는 느낌을 주고 싶어서 가장 유명한 Almofire예를 든거다. URLSession을 쓸 줄 알아야 한다. 


Rx가 Reactive Programming의 구현체라고 위에서 언급했다. 구현체? 

그냥 쉽게 라이브러리라고 생각하면 된다.

Reactive Programming을 할 수 있는 프로그래밍 언어는 굉장히 많다. 나는 그 중에서 Swift라는 언어를 쓴거고.

  • RxJava는 java에서 reactive programming을 쉽고 간결하게 해주는 라이브러리
  • RxSwift도 마찬가지로 Swift에서 Reactvie programming을 쉽게 도와주는 라이브러리다.

Rx를 모를 때, 나는 RxSwift가 Swift와 비슷한 언어라고 생각한적이 있다. RxSwift는 라이브러리다. Alamofire와 같은 녀석이다. 내가 길고 장황하게 써야 해결하는 것을 간단한 코드 몇줄만으로도 똑같은 동작을 내게 해주는 라이브러리다.


Rx를 쓰는 이유. 그러니까 내가 RxSwift를 쓰는 이유는 이게 다다.

Rx~를 안써도 다 할 수 있다. 다 짤 수 있다. 똑같은거 다 할 수 있다. 

근데, 그게 길어지고 장황해지고 읽기 힘들어지니까 그걸 쉽게 해주는게 Rx다. (Rx쓴다고 읽기 쉬워진다고는 말 안했다..)


쓰고보니 https://zeddios.tistory.com/303에서 썼던 것과 거의 비슷하기도 하고, 아니기도 하고..

지금 Rx를 프로젝트에 도입하고 있는데 (MVVM으로 바꾸면서)

사실 쓰면서 많이 욕도하고 오 이런것도 되네? 라는 것도 많이 느꼈는데, 사실 확실한 개념 없이 그냥 일단 해보자!라고 시작했다.

그리고 이제야 제대로 공부를 시작하려고 한다.


이 글에 그리고 틀린내용이 있을 수 있다. 

만약 틀리거나 보충되어야 할 내용이 있다면 댓글로 꼭 알려주길 바람. 


반응형

'공부' 카테고리의 다른 글

Xcode Target, Project, Workspace, Scheme 그리고 Build Setting.  (16) 2019.03.18
Git submodule써보기 + 삭제하는 법.  (0) 2019.03.16
Premiere Pro 기초 ) 자막넣기  (3) 2019.02.22
ABI stability  (4) 2019.01.07
App Thinning. 그리고 Bitcode  (11) 2019.01.06