Rx의 핵심 개념은 유튜버와 구독자의 관계를 생각하면 된다.
구독자들이 어떠한 Observable이라는 유튜버를 구독하고 유튜버가 영상을 올리면, 즉 이벤트를 방출하면 이를 감지해서 지금 시청하거나 보관함에 넣거나 등의 액션을 취하는 것이다.
Observable이란?
사전적인 의미는 관찰 가능한 이라는 의미를 갖고 있다.
Observable이 이벤트를 방출하고 구독자가 이 이벤트를 관찰할 수 있다.는 것에서 그 의미를 찾을 수 있다.
(시간의 흐름에 따라서 이벤트를 관찰할 수 있다.)
Event Type
Observable이 방출하는 이벤트에는 크게 네 가지 타입이 존재한다.
이 네가지 타입에 대해 Observable을 구독한 구독자는 이벤트를 전달받고 각 상황에 따라서 액션을 취하게 된다.
- onNext
- onError
- onCompleted
- onDisposed
onNext
Observable이 새로운 이벤트를 방출할 때 onNext 메소드가 호출된다.
onError
Observable이 기대한 결과가 아니거나 오류가 발생한 경우 onError 메소드가 호출된다.
onCompleted
Observable 시퀀스에서 에러가 발생하지 않고 더 이상 방출할 이벤트가 없을 때, 즉 완료되었을 때 onCompleted 메소드가 호출된다.
onDisposed
Observable 시퀀스가 말 그대로 버려진 경우, onDisposed 이벤트가 호출된다.
사용 방법
Observable이 시간이 지나면서 각 상황에 맞는 이벤트를 방출하고 구독자들이 Observable을 구독하여 이벤트에 다른 액션을 취한다.
이를 코드로 어떻게 구현되는지 살펴보자.
아래와 같이 시간이 지남에 따라서 1 -> 2 -> 3 -> 순으로 이벤트를 방출하는 Observable이 있다고 할 때
이 이벤트에 대해서 어떻게 처리할 수 있을까? 처리할까?
먼저, 이 이벤트에 대한 감지를 위해서는 구독을 해야한다.
let observable = Observable.of(1, 2, 3, 4)
observable.subscribe()
위와 같이 .subscribe() 메서드를 통해 구독을 할 수 있다.
이렇게만 하고 아무런 작업을 하지 않는다면 유튜버가 영상을 올려도 이에 대한 아무런 반응을 하지 않는 것과 같다;;
Observable이 방출한 이벤트에 대해서 앞서 말한 네가지 타입으로 나눠서 상황에 대한 액션을 취할 수 있다.
observable.subscribe { element in
print("Observable로 부터 \(element) 를 전달 받았습니다.")
} onError: { error in
print(error.localizedDescription)
} onCompleted: {
print("Observable 이 정상적으로 종료 되었습니다.")
} onDisposed: {
print("Observable 이 버려졌습니다.")
}
그리고 실행을 하면 아래와 같이 출력되는 것을 확인할 수 있다.
시간 순서대로, 에러가 나지 않았기 때문에 순차적으로 출력된다.
그리고 문제 없이 작업이 끝났으므로 onCompleted 메서드가 실행되고, 하나의 observable에 대한 Life Cycle 끝나므로 onDisposed도 호출되는 것을 확인할 수 있다.
🔥 정리
Observable은 시간의 흐름에 따라서 이벤트를 방출하고
이 이벤트를 다룰 곳에서 구독을 하여 이벤트(의 타입)에 따라서 액션을 취할 수 있다.
'Swift > RxSwift' 카테고리의 다른 글
[🔥Rx뿌셔] Disposable (0) | 2022.10.25 |
---|---|
[🔥Rx뿌셔] Subscribe (0) | 2022.10.25 |
[🔥Rx뿌셔] Intro (1) | 2022.10.24 |
[🌱SeSAC] Creating and Subscribing to Observables (0) | 2022.10.24 |
[🌱SeSAC] Rx.playground 실행하는 방법 (1) | 2022.10.24 |