Rx 무엇일까요?


Rx 무엇일까요? Reactive Extensions의 줄임말로써 Reactive는 반응을 보인다는 뜻입니다.

Reactive Programming은 반응형 프로그래밍입니다.



반응형 프로그래밍의 특성


 명령형 프로그래밍

 반응형 프로그래밍

 a = 0 

 b = 10

 c = 5

 a = b + c

 print(a) // 15

 c = 20

 print(a) // 15

 a = 0

 b = 10

 c = 5 

 a = b + c

 print(a) // 15

 c = 20

 print(a) // 30

명령형 프로그래밍에서는 a에 값을 정한 이후에 c값이 변경이 되더라도 a의 값에 영향을 주진 않지만,

반응형 프로그래밍은 c값이 변하는 것에 반응하여 a의 값이 바뀌는 형태입니다.

wikipedia에서도 볼 수 있듯 반응형 프로그래밍을 대표하는 프로그래밍은 스프레드시트(spreadsheets)입니다.

스프레드시트 프로그램을 통해 Reactive Programming을 직관적으로 알 수 있습니다.

특정 셀의 값이 변화되면 구현한 함수의 따라 다른 셀의 값도 같이 반응하여 바뀌기 때문입니다.




RxSwift 무엇일까요?


RxSwift 무엇일까요? Swift에서 반응형 프로그래밍을 하기 위한 라이브러리입니다.

RxSwift의 핵심 요소는 (Observable, Data Flow) 2가지가 있습니다.



Observable란?


반응한다는 것을 구현하기 위해서 Swift에서도 Observer Patten을 사용합니다.

마찬가지로 RxSwift에서도 Observer과 유사한 Observable을 사용하고 있습니다.

Observable은 HOT과 COLD 2가지 방식으로 나뉩니다.



HOT Observable란?


HOT Observable은 이벤트가 발생하면 그걸 구독하고 있는 Subscriber가 그 이벤트를 받을 수 있습니다.

만약 Subscriber가 없을 경우 Observable의 이벤트가 발생하면 그래도 이벤트를 계속 발송하려고 합니다.

(예시 - Facebook Live, Youtube Live) 생방송 같은 경우 시청자가 없어도 계속 송출한다.

Eager Evaluation: 조급한 개선법



COLD Observable란?


COLD Observable은 반면에 Subscriber가 없으면 이벤트를 전달하지 않습니다.

(예시 - VOD 다시보기 서비스) 보는 사람이 보고 싶지 않으면 송출하지 않는다.

Lazy Evaluation: 느긋한 개선법



Data Flow란?


 Control Flow 

 Data Flow

 Goto

 If / Then / Else

 Switch / Case

 For / While

 Stateless

 Recursion

 Pipe


Control Flow 방식은 개발자들이 흔히 사용하는 방식으로써 위와 같이 명령문들 사용하여 프로그래밍 하는 방식입니다.

Data Flow 방식은 말 그대로 데이터가 흐르는 패러다임입니다. 객체지향에서는 체이닝 방식을 통해 구현할 수가 있습니다.



예제 보기 (Operator)


Observable.just("Hello World")
	.subscribe(onNext: { value in
			print(value)
	}).addDiposableTo(bag)

just()

 - 매개변수 Hello World의 String을 Observable 형태로 바꿔주는 메서드입니다.

subscribe()

 - 위에 만들어진 Observable을 구독하는 메서드입니다. Cold Observable 방법으로 value 값을 가져옵니다.

    value값은 "Hello World"라는 값이 나오게 됩니다.

addDisposableTo()

 - 시퀀스를 중단하기 위해 사용되는 메서드입니다.

    SpinLock은 쓰레드끼리 서로 동기화를 맞추기위해서 실행됩니다.


추천 및 참고 사이트

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 장점 (2/2)