일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Observable
- Singleton Design Pattern
- NSAttributedString
- Codable
- reactivex
- Equatable
- 오늘의성취도
- UIDocument
- CoreGraphics
- CustomStringConvertible
- IOS
- JSONEncoder
- UIGestureRecognizer
- 에어팟
- UIDocumentBrowserViewController
- MVP
- Swift
- weak
- Arc
- AVFoundation
- PhotoKit
- unowned
- JSONDecoder
- uicollectionview
- Hashable
- UIDynamicAnimator
- Stanford cs193p
- UIBezierPath
- rxswift
- Git
- Today
- Total
아직은 개린이
[RxSwift] Observable (1) 본문
Observable 이란?
ReactiveX에서 Observer는 Observable을 구독한다. Observable이 배출하는 하나 또는 연속된 항목에 Observer는 반응한다. 이러한 패턴은 동시성 연산을 가능하게 한다. 그 이유는 Observable이 객체를 배출할 때까지 기다릴 필요 없이 어떤 객체가 배출되면 그 시점을 감시하는 관찰자를 옵저버 안에 두고 그 관찰자를 통해 배출 알림을 받으면 되기 때문이다.
ReactiveX 공식 문서에 나온 내용은 위와 같다.
이해한대로 끄적여보면.. Observable이라는 애(?)에서는 객체들이 배출되고, 배출된 객체들은 옵저버에 의해 캐치되어서 뭔가 다음 작업을 할 수 있다는 것인데... 뭔가 알듯 말듯 아리송한 느낌이다.
그러던 중 몇몇 블로그에서 쉽게 빗대어 놓은 예시를 발견했고, 해당 내용을 읽고 나니 좀 더 명확한 그림이 그려졌다!
예시 1)
유튜브에 빗대면, 크리에이터가 Observable 역할을 하며 이벤트에 해당하는 영상들을 발행하면, 크리에이터를 구독하는 구독자(Observer)들이 영상을 시청/소비 하는 것과 비슷하다!
예시 2)
어떤 강(stream)이 있는데 이 강에는 물고기(value) 혹은 쓰레기(value)들이 흘러간다. 강에서 물고기만 건져 회를 뜰 수 있는 시스템을 만들었다고 가정해보자. 이 시스템은 사용자가 사용 버튼을 누를 시 가동된다. 여기서 강이 Observable에 해당한다. (Operator, Subscribe와 같은 개념은 추후에 좀 더 보충!)
즉, Observable은 관찰 가능한 데이터의 흐름이라고 이해하면 될 것 같다. Observer가 Observable을 구독하고, Observable이 방출하는 이벤트에 반응하는 것이 Rx의 가장 큰 핵심이다. 여기서 이벤트라는 것은 숫자 혹은 커스텀 타입의 인스턴스일 수도 있고, tap과 같은 액션일 수도 있고!
또한, Observable = sequence = observable sequence 모두 같은 의미로 사용된다고 하며, 옵저버 개념을 이해하며 더 배우겠지만 Observer가 관찰하는 대상이라고 할 수 있다.
Observable의 라이프사이클
Observable가 방출할 수 있는 3가지 이벤트를 마블 다이어그램과 함께 알아보자.
(마블 다이어그램에서 화살표는 상대적인 시간의 흐름, 원은 sequence event를 의미한다)
- next
- 구성요소, 값을 방출하는 기능
- Observer에게 데이터를 전달함
- error
- 이벤트를 방출하다가 에러가 발생하면 error를 방출하고 stream을 종료
- 다이어그램에서 error 이벤트는 X로 표시하고, Observable의 라이프사이클은 이곳에서 종료된다.
- complete
- 모든 next 이벤트가 성공적으로 종료되면 발생하는 이벤트
- 다이어그램에서 complete는 vertical bar로 표시하고, error와 마찬가지로 Observable의 라이프사이클은 이곳에서 종료된다.
Observable은 element를 포함하는 next 이벤트를 방출하고, 이는 error 혹은 completed 등의 terminate 이벤트가 발생하기 전까지는 지속될 수 있다. Observable이 종료되면 더 이상 이벤트를 방출할 수 없다.
Hot Observable, Cold Observable
Observable에는 hot, cold 개념이 있다.
- Hot Observable은 구독 여부에 상관없이 이벤트를 발생시키고, 나중에 구독한 옵저버는 중간부터 시퀀스를 관찰할 수 있다고 한다. 유튜브 실시간 방송의 예시를 들어, 시청자(Observer)가 어느 시점에 방송을 보던 상관없이 방송은 진행되고, 시청자는 subscribe 하는 시점부터 방송을 볼 수 있는 것을 생각하면 될 것 같다.
- Cold Observable은 옵저버가 구독하기 전까지는 아이템을 방출하지 않고 기다리며, 구독을 하면 시퀀스 전체를 볼 수 있다고 한다. VOD 시청에 빗대어, 어떤 시청자(Observer)이건 시청을 시작하면 처음부터 방송이 시작되는 것을 생각하면 된다.
Observable에 대한 큰 그림을 파악하는 것도 생각보다 쉽지 않았다. 그렇다보니.. Observable 자체만 글을 몇 개 더 써야할 것 같다.. ㅎㅎ
회사에서 안드로이드 개발자 분이랑 Rx 스터디를 진행하기로 해서 공부하고 있는데, 꽤나 재밌는 시간이 될 것 같다!!
참고자료
- http://reactivex.io/documentation/ko/observable.html
- https://duwjdtn11.tistory.com/625(유튜브에 빗댄 예시 1 내용이 있던 블로그)
- https://axe-num1.tistory.com/22(강물에 빗댄 예시 2 내용이 있던 블로그)
'Swift + iOS > RxSwift' 카테고리의 다른 글
[RxSwift] Subject (0) | 2021.10.11 |
---|---|
[RxSwift] Observable (2) (0) | 2021.10.11 |
Reactive Programming, Rx (0) | 2021.10.03 |