Observables and Observers # 1

이숭인·2021년 6월 27일
1

Mastering RxSwift

목록 보기
2/7

Observable에 대해 알아보자.

내용:

  • Observable은 Observable Sequence 혹은 Sequence라고 부른다.

  1. Observer는 Observable을 감시하고 있다가 전달되는 이벤트를 처리한다.
  2. Observer를 감사히는것을 Subscribe(구독)한다고 한다.
  3. Observer를 Subscriber라고도 부른다.

Observable은 3가지 이벤트를 전달한다.

  • Next
  • Completed
  • Error

Next Event

  • Observable에서 발생한 새로운 이벤트는 Next이벤트를 통해 Observer로 전달
  • 이벤트에 값이 포함되어 있다면 Next이벤트와 함께 전달된다(Emission).
  • Observable의 lifeCicle동안 Next이벤트가 한번도 전달되지 않느 경우가 있고 하나 이상 전달되는 경우도 존재한다.

Completed , Error Event

  • Observable에서 에러가 발생하게 되면 Error 이벤트가 발생한다.
  • 반면 Observable이 정상적으로 종료된다면 Completed 이벤트가 전달된다.
  • 두 이벤트는 Observable의 lifeCicle에서 가장 마지막에 전달된다.
  • 이후 Observable이 종료되고 모든 리소스가 정리되기 때문에 다른 이벤트는 전달되지 않는다.
  • 보통 두 이벤트는 Notification 이라고 부른다

Observable의 동작을 그림으로 표현해보자

  • 화살표는 시간의 상대적인 흐름을 나타낸다
  • 화살표 위에 표시한 개별 원은 이벤트(Next)를 의미
  • Next이벤트는 값을 포함할 수 있고, 원 내부에 저장된 값을 표현한다.
  • verticle bar는 완료를 나타냄 completed이벤트이고 Observable의 lifeCicle은 여기서 종료된다.

  • 에러가 발생한 경우 X 로 표현된다. Completed와 마찬가지로 lifeCicle 종료
    위의 두 그림을 RxSwift에선 Marble Diagram이라 한다.
  • Observable과 연산자의 동작을 시각적으로 표현해주기 때문에 쉽게 이해 가능

이제 코드로 알아보자!

Observable -> Observer로 이벤트를 생성해서 전달하는 2가지 방법을 코드로 구현해보자.

  • create 연산자를 통해서 Observable의 동작을 직접 구현하는 방식
  • from 연산자를 이용해서 미리 정의된 규칙에 따라 이벤트를 전달하는 방식
// #1 동작을 직접 구현한다.
Observable<Int>.create { (observer) -> Disposable in
    observer.on(.next(0)) // 1 
    observer.onNext(1) // 2 
    observer.onCompleted() // 3
    return Disposables.create() // 4
}

// #2 미리 정의된 규칙에 따라 이벤트를 전달한다.

Observable.from([0,1]) // 5

라인별로 동작

1 : on 메서드를 사용해 next이벤트에 0 데이터를 담아 observer에 전달
2 : onNext 메서드를 사용해 next이벤트에 0 데이터를 담아 observer에 전달
3 : observable의 lifeCicle종료 선언, 더 이상 이벤트를 받을 수 없음
4 : 메모리 정리에 필요한 객체이고, 다음에 하기로
5 : 이렇게 파라미터로 전달된 요소를 순서대로 방출하고 completed이벤트를 전달하는 observable을 생성한다.

마지막으로 .. 정리하자면

  • 단순히 순서대로 방출되는 observable을 생성할때에는 create로 직접 구현하는것보다는 from 같은 다른 연산자를 이용하는것이 간편하다.
  • 현재까지는 observable이 생성된 상태, 아직 정수가 방출되거나 이벤트가 발생하지 않음
  • 위의 두 옵져버블에서 이벤트가 실행되는 시점은 옵저버가 옵저버블을 구독하는 시점에 저게 실행된다고 생각하면 될듯
  • 옵저버가 옵저버블을 구독하는 방법은 다음강의에서 !
profile
iOS Developer

0개의 댓글