RxSwift

[RxSwift] 옵저버블(Observable)이란?

devharrry 2020. 5. 16. 16:32

- 옵저버블(Observable)이란?

ReactiveX에서는 옵저버는 옵저버블을 구독(Subcribe)하고 옵저버블이 방출하는 항목, *시퀀스를 통해 이벤트를 처리합니다. 

쉽게 말해, 옵저버블은 이벤트를 전달하고 옵저버는 옵저버블을 감시하고 있다가 전달되는 이벤트를 처리합니다.

(*시퀀스란? 옵저버블이 될 수 있는 데이터 타입(Array, String, Int, 그 외 모델))

 

다이어그램을 한번 봐볼게요. 

 

 

왼쪽에서 오른쪽 화살표는 시간을 나타내고 숫자로 표시된 부분은 시퀀스 요소를 나타냅니다. 

 

 

- 옵저버블이 전달하는 세 가지 이벤트(onNext, onError, onCompleted) 

아래 3가지 이벤트가 전달되는 시점은 옵저버가 구독(subscribe) 시작한 시점입니다.

(subscribe는 옵저버블과 옵저버를 연결하는 역할 -> 두 요소를 연결해야 이벤트가 전달) 

 

public enum Event<Element> {
  case next(Element)
  case error(Swfit.Error)
  case completed
}

 

onNext 

옵저버블은 새로운 항목들을 배출할 때 마다 이 메소드가 호출됩니다. 

 

onError

옵저버블이 기대하는 데이터가 생성되지 않았거나 다른 이유로 오류가 발생할 경우 이 메소드가 호출됩니다. 

 

onCompleted

오류가 발생하지 않고 더 이상 배출할 항목이 없을 경우에 이 메소드가 호출됩니다. 

 

여기서 onCompleted, onError 둘 중 하나의 이벤트로 종료되었다면 관련된 리소스가 자동으로 해지됩니다. 

 

옵저버블 별로 해지하는건 번거롭기 때문에 DisposeBag()을 사용하여 disposable을 담아두었다가 한번에 해지하는 것이 간편합니다. 

 

- 옵저버블 응용 

옵저버블과 옵저버는 그저 ReactiveX의 시작점일 뿐입니다. 다양한 Operators을 통해 배출하는 연속된 항목들을 변환시키고, 결합하고, 조작하는 기능들을 통해 직관적인 코드를 작성할 수 있습니다.

 

 

 

다음 포스트 글에서는 여러 오퍼레이터들을 이용하여 옵저버블을 응용하는 글을 작성하도록 하겠습니다.

'RxSwift' 카테고리의 다른 글

[RxSwift] Subject 정리  (1) 2020.05.24
[RxSwift] Creating Observables 정리  (0) 2020.05.16
RxSwift란  (0) 2020.05.16
RxSwift Summary 카테고리 포스트 계획  (0) 2020.05.16