Observable
Observable
An Observable emits items or sends notifications to its observers by calling the observers’ methods.
Observable은 item을 배출하거나 observable의 메소드 호출을 통해 Observer에게 알림을 보낸다.
➡️ 이벤트를 전달한다.
✅ 관찰 가능한 순차적인 형태
✅ Observable은 관찰이 가능한 흐름
✅ 비동기 이벤트의 Sequence를 생성할 수 있는 대상
✅ Observable을 가장 쉽게 이해하기 위해서는 "관찰 가능한 형태"라고 이해하면 된다.
RxSwift의 Observable 정의를 살펴보자.
제네릭 클래스로 구성되어 있다. 즉, 우리가 비동기 이벤트를 Observable 형태로 생성한다는 것은 비동기 이벤트를 제네릭 타입의 Observable이란 클래스 인스턴스를 생성한다는 것.
UIButton의 Tapped 이벤트로 이해해보자.
UIButton의 Tapped는 비동기 이벤트이다. ➡️ 데이터의 변화에 대해 관찰이 가능한 형태 ➡️ Observable 형태로 생성이 가능
An Observable emits items or sends notifications to its observers by calling the observers’ methods.
Observable은 item을 배출하거나 observable의 메소드 호출을 통해 Observer에게 알림을 보낸다.
➡️ 즉, 어떠한 이벤트가 발생했다는 것을 알려주기 위해 items를 emits !
✅ Observable = Sequence?
위의 그림처럼 여러번 이벤트가 발생할 경우, Observable은 해당 이벤트에 대한 item을 순차적으로 emit하기 때문.
Observer
Observer
In ReactiveX an observer subscribes to an Observable.
An observer subscribes to an Observable
Rx에서 Observer는 Observable을 구독한다.
➡️ 이벤트를 전달 받는다.
✅ Observable이 item을 emit하면 그 item을 전달 받는다.
어떻게 Observer와 Observable을 연결할까?
The Subscribe method is how you connect an observer to an Observable.
➡️ Subscribe method를 통해 연결 !
1. onNext
Observable은 새로운 item을 emit할 때마다 이 메소드를 호출합니다. 이 메소드는 Observable이 emit하는 item을 인자로 전달 받습니다.
2. onError
Observable은 기대하는 데이터가 생성되지 않았거나 다른 이유로 오류가 발생할 경우 오류를 알리기 위해 이 메소드를 호출합니다. 이 메소드가 호출되면 onNext, onCompleted는 더이상 호출되지 않습니다. onError 메소드는 오류 정보를 저장하고 있는 객체를 인자로 전달 받습니다.
3. onCompleted
오류가 발생하지 않았다면 Observable은 마지막 onNext를 호출한 후 이 메소드를 호출합니다.
간단한 예제 코드(printButton을 Tapped하는 이벤트가 발생했을 때)를 통해 Observer와 Observable을 이해해보자.
❗️RxCocoa 사용하지 않음, Just 연산자/Dispose가 등장하지만 무시하고 어떻게 작동하는지만 이해하자.
@objc func buttonTappedRx(_ sender: UIButton) {
Observable.just("RxSwift")
.subscribe(onNext: { str in
print("안녕 나는 \(str)라고해 !")
}, onError: { err in
print(err)
}, onCompleted: {
print("onCompleted!")
}).dispose()
}
printButton에 대해 Tapped 이벤트가 발생하였다.
subscribe(구독)을 통해서 Observable이 emit하는 item에 대해 전달받을 수 있고, 인자로 onNext, onError, onCompleted를 전달받아 넘겨줄 수 있다.
Observer는 Observable을 구독하고 있기 때문에, onNext, onError, onCompleted 메소드를 인자로 넘길 수 있는 것.
onNext : item을 emit할 때마다 호출 -> Butten Tapped시 호출 -> 안녕 나는 RxSwift라고해 ! 출력
onError : error가 발생 했을 때 호출 -> 위의 코드에서 error가 발생하지 않았기 때문에 호출되지 않음.
onCompleted : 에러가 발생하지 않음 -> 이벤트가 끝날 때 호출 -> onCompleted! 출력
Reference
https://babbab2.tistory.com/185
https://reactivex.io/documentation/observable.html
'iOS > RxSwift' 카테고리의 다른 글
[iOS/RxSwift] Operators - Map, Filter (0) | 2024.02.03 |
---|---|
[iOS/RxSwift] Operators - 생성 연산자 (create, just, of, from) (1) | 2024.02.03 |
[iOS/RxSwift] Marble Diagram (0) | 2024.02.01 |
[iOS/RxSwift] Disposable, DisposeBag (0) | 2024.02.01 |
[iOS/RxSwift] RxSwift가 뭔데? (0) | 2024.01.30 |