Tunko Development Diary

RxSwift) Observables 과 Observers 본문

Development/RxSwift

RxSwift) Observables 과 Observers

Tunko 2022. 5. 30. 04:30

Observable 은 Observale Sequence 또는 Sequence 라고 불리기도 한다.

Observable → Event → Observar

옵저버블은 옵저버에게 이벤트를 전달합니다.

Observable ← Subscribe ← Observar(subscriber)

옵저버는 옵저버블을 구독합니다.

Observable을 Observer가 감시하는걸 구독한다고 합니다. 따라서 subscriber(구독자) 라고 불리기도 합니다.


옵저버블이 보내는 이벤트는 3가지 입니다.

  1. Next (Emission : 방출, 배출)
  2. Error
  3. Completed

Error, Completed는 마지막에 전달됩니다.

Error, Completed는 Emission이 아닌 Notification이라고 부릅니다.


RxMables 를 통해 동작을 확인할 수 있습니다.

RxMarbles: Interactive diagrams of Rx Observables


예시 코드)

// 여기서 create는 연산자라고 불립니다.
// create 연산자는 클로저를 받고 Disposable을 리턴합니다.
// (observer) -> Disposable
Observable<Int>.create { (observer) -> Disposable in
    observer.on(.next(0)) // 0 이벤트 호출
    observer.onNext(1)    // 1 이벤트 호출
    
    observer.onCompleted()
    
    return Disposables.create()
}

// from은 연산자입니다.
// from은 배열안에 데이터를 순서대로 이벤트호출하고 Disposable까지 반환합니다.
Observable.from([0, 1])

// 위 코드는 선언부입니다. 해당 옵저버블이 실행되진 않습니다.
// 선언된 옵저버블이 실행될 때는 구독하는 시점에 실행됩니다.

옵저버가 구독을 시작하는 방법은 선언된 Observable에서 subcribe 메소드를 호출하는 것입니다.

subscribe 는 연산자라고 불리기도합니다..

subscribe 메소드는 Observable과 Observer 을 연결합니다.

Observable과 Observer 연결해야만 이벤트가 전달 됩니다.

subscribe 메소드는 클로저를 반환합니다.

let o1 = Observable<Int>.create { (observer) -> Disposable in
    observer.on(.next(0)) // 0 이벤트 호출
    observer.onNext(1)    // 1 이벤트 호출
    
    observer.onCompleted()
    
    return Disposables.create()
}

// 모든 이벤트를 받음 next, error, completed
o1.subscribe {
		print("=== start ===")
    print($0)
		if let elem = $0.element {
				print(elem)
		}
		print("=== end ===")
}

print("-------------------")

// Next 이벤트를 통해 전달 된 값만 호출
o1.subscribe(onNext: { elem in print(elem) })

옵저버는 두개의 이벤트를 동시에 호출 하지 않습니다.

하나씩 이벤트를 호출합니다.

아래는 호출 결과 입니다.

=== start ===  // 1
next(0)
0
=== end ===
=== start ===  // 2
next(1)
1
=== end ===
=== start ===  // 3
completed    
=== end ===
------------------------
0
1

//1 : 0 이벤트 호출부분

//2 : 1 이벤트 호출부분

//3 : observer.onCompleted() 이벤트 호출부분

반응형

'Development > RxSwift' 카테고리의 다른 글

RxSwift) PublishSubject 란?  (0) 2022.05.30
Subject 란?  (0) 2022.05.30
RxSwift) Operators 란?  (0) 2022.05.30
RxSwift) Disposables 란?  (0) 2022.05.30
Reactive Programming 란?  (0) 2022.05.30
Comments