RxSwift를 사용하기 위해선 가장 기본적인 틀인 Observable, Observer, Subscribe에 대해 알고 있어야 한다.
Observable
Observable은 이벤트를 전달한다.
조금 더 정확히 설명 하자면
이벤트를 사건 흐름에 따라 전달하는 전달자 라고 표현한다.
Observable은 세 가지 타입의 이벤트를 배출하고 Observer가 Observable를 Subscribe하여 이 이벤트를 받을 수 있다.
next (Emission)
next 이벤트를 통해 각각의 요소들을 방출
completed (Notification)
시퀀스를 성공적으로 마침
error (Notification)
오류가 발생하여 마침
Observable의 생명주기
Observable은 생성되어 next 이벤트를 Emission(방출)하고 상황에 따라 completed와 error 이벤트를 Notification 하고 종료된다.
Observer
Observer는 말 그대로 Observable의 관찰자가 되어 Observable이 이벤트를 방출 했을 때 그 이벤트를 받을 수 있다.
Observable의 관찰자가 되는 방법은 Subscribe(구독)하면 된다.
구독하려는 Observable이 세가지 타입의 이벤트를 방출 했을 때 어떤 작업을 할 것인지 subscribe의 메서드 파라미터를 통해 클로저로 같이 넘겨주는 것이다.
Subscribe
observableThing.subscribe {
// code
}
Observer가 구독을 시작하는 방법은 Observable의 subscribe 메서드를 호출 하는 것이다.
이 subscribe 메서드의 원형은 다음과 같다.
public func subscribe(
onNext: ((Element) -> Void)? = nil,
onError: ((Swift.Error) -> Void)? = nil,
onCompleted: (() -> Void)? = nil,
onDisposed: (() -> Void)? = nil
) -> Disposable
subscribe에는 4가지 파라미터가 있고 모두 클로저 타입이다.
onNext
새로운 이벤트를 방출 할 때 마다 해당 클로저가 이 메서드를 호출
이때 Observable이 방출하는 항목을 클로저의 파라미터로 전달 받음
onError
기대하는 데이터가 생성되지 않았거나 오류가 발생 했을 때, Observer에게 알리기 위해 이 메서드를 호출
onCompleted
이벤트가 종료되었을 때 이벤트가 완료 된 것을 Observer에게 알리기 위해 이 메서드를 호출
onDisposed
Observable과 관련된 모든 리소스가 제거된 후에 이 메서드를 호출
내 이해를 토대로 식당에 비유해보자면,
Observable은 메뉴판의 음식
Observer는 식당의 요리사이자 종업원
Subscribe는 주문하는 행위 정도로 이해했다.
메뉴판에 음식(Observable)을 주문하기 위해 벨을 누르고(Subscribe) 주문(event)을 한다.
주문을 받은 요리사(Observer)는 주문 내용에 맞게 음식을 해서 손님에게 전달한다.
이걸 RxSwift로 얘기하면,
Observable 객체를 생성하고 이 객체를 Observer가 Subscribe 하여 관찰하고 있다가
이벤트를 방출 할 때, subscribe 메서드의 파라미터를 상황에 맞게 이용하여 원하는 작업을 한다.
이렇게 이해하고 있는게 맞는지는 모르겠지만 현재 공부한 RxSwift는 이런 식으로 동작하는것 같다.
참고한 사이트
https://velog.io/@phs880623/RxSwift-Observable%EC%9D%B4%EB%9E%80
https://velog.io/@phs880623/RxSwift-Disposable%EB%9E%80
https://babbab2.tistory.com/185
글의 틀린 내용이 있다면 댓글로 알려주세요!
'iOS > RxSwift' 카테고리의 다른 글
| Subject의 종류 (1) | 2024.06.04 |
|---|---|
| Subject에 대해 (0) | 2024.04.20 |
| Hot Observable VS Cold Observable (0) | 2024.04.20 |
| RxSwift의 기본 개념 (0) | 2024.04.07 |