RxSwift 기본 개념

말로만 듣던 RxSwift!! 드디어 어떤건지 배워보았다

 

RxSwift를 살펴보기 전에 먼저 짚어볼 점!

1. RxSwift는 라이브러리에 불과하다. 툴적인 면으로 이해하는 것이 좋다.

2. 다양한 메서드 종류가 많지만 이것 또한 메서드에 불과하다는 걸 잊지 말 것!

아무래도 처음 개념을 배우다보면 신나서 이것저것 더 살펴보게 되고 깊게 빠지게 될 수 있는데,

이런 라이브러리보다 중요한건 기본적인 개념들을 잘 이해하고 있는지(클로저나 옵저버 등)이다.

(기본 개념 다루는 블로그부터 작성해야겠다..고 반성 중...)

 

그럼 지금부터 본격적으로 살펴보자!

 

RxSwift

RxSwift에서 다루는 개념 3가지

  • Observer Pattern
    • 필요한 시점에 발생했을 때 포스트를 보내고, 받은 객체가 특정 메서드를 실행한다.
    • 말 그대로 "관찰"하고 이벤트를 받은 후 전달하는 것
  • 함수형 프로그래밍
    • map, filter, reduce 등의 개념
    • 이것도 블로그에서 다루어야 할 듯...!!
  • Iterator Pattern
    • 헷갈리는 것이 바로 이터레이터 패턴
    • 시퀀스 타입
      • Sequence라는 프로토콜 안에 makeIterator. 요소를 순환하게 함. 이걸로 반복문을 돌 수 있다.
      • 자세한 것은 추후에 설명!

 

Observable

옵저버블을 이해하기 위해 계산기로 예를 들어보겠다.

계산기 앱에는 숫자 버튼이 있고 눌린 숫자를 반영하는 Label이 있다.

숫자 버튼에서는 사용자가 터치하는 이벤트를 전달하고,

라벨에서는 이벤트가 전달되면 그 결과를 반영한다.

이 때, 이벤트를 전달하는 객체를 Observable, 전달받은 이벤트를 처리하는 객체를 Observer라고 한다.

Observable: 이벤트를 전달함.
Observer: 이벤트를 처리함. 관찰하고 있어야 함.

여기에서 '처리'란, alert을 띄워주거나, 화면을 전환해주거나, 라벨에 결과를 띄워주는 등 여러 가지가 있을 수 있다.

 

또 다른 예로 유튜브나 인스타그램을 들 수 있다.

유튜브 채널의 주인이 영상을 올리면 Observable을 계속 보내는 것이다. 그런데 그 신호를 받을 수 있는 사람은 그 채널을 구독(subscribe)하고 있는 사람 뿐이다.

인스타그램에서 게시물을 올리면 팔로우하고 있는 사람들의 피드에서는 이벤트를 전달받는다. 하지만 팔로우하고 있지 않은 사용자에게는 아무리 많이 신호를 보내도 닿지 않는다.

(당연히 알고리즘이나 검색 탭은 다른 이야기다! 채널의 주인-구독자의 관계에만 집중해보자)

 

Observable은 계속 이벤트를 전달하고, Observer는 관찰하고 있어야 한다.

이 관계가 항상 1대 1인 것은 아니다.

  • 만약 Observable에게 Observer가 없다면?
    • 허공에 대고 이벤트를 전달하는 꼴이 된다.
  • 그러나 나중에 Observer가 생긴다면?
    • 필요한 시점에 달면 그때부터 전달을 받게 된다! 그래도 괜찮다.

 

Infinite, Finite Observable Sequences

이벤트 방출(emit)이 무한 혹은 유한한 경우들이 있다.

 

Infinite Observable Sequences

한계 없이 계속해서 이벤트를 전달할 수 있는 경우이다.

일반적인 버튼이 여기에 해당된다. 버튼은 제한 없이 연속해서 누를 수 있다. 또 다른 예로, 가로 모드를 구현해놓았다면 디바이스를 가로로 변경할 때, 다시 세로로 변경할 때 제한 없이 계속해서 레이아웃이 바뀌어야 한다.

 

Finite Observable Sequences

유한한 경우는 좀 특이하다. 예를 들어, 넷플릭스에서 영화를 오프라인으로 저장해놓는다고 생각해보자. 영화는 하나에 용량이 매우 크기 때문에 단숨에 다운로드가 완료되지 않는다. 한 번에 데이터 전달이 어려우니 초당 몇십메가바이트씩 데이터를 저장하게 된다. 

이런 경우, 중간에 네트워크 연결이 유실되거나, 다운로드가 실패되거나, 다운로드가 완료되는 등 여러 가지 경우가 생기게 된다.

Next - 점진적 다운로드
Completed - 다운로드 완료
Error - 네트워크 연결 유실, 다운로드 실패

이런 상태에 따라 Observable Lifecycle을 나눠볼 수 있다.

 

 

 

오늘은 일단 여기까지!

코드로도 실습해보고 더 이해한 뒤에 또 작성해야겠다. ㅎㅎ

 


새싹에서 배운 내용을 이해하고 정리합니다.