RxSwitft에서 Observable은 가장 기본이 되는 개념이다. Observable은 비동기 데이터 스트림을 나타내는 객체로 시간이 지남에 따라 변할 수 있는 값이나 이벤트의 시퀀스를 표현한것입니다.
Observable은 데이터들을 비동기적으로 받을 수 있다.
시퀀스의 사전적 의미는 순서이며 Observable은 구독된 데이터나 이벤트들의 순서이다.
Obeservable == ObservableSequence == Sequence
Observable Generic 은 Observable이 방출할 데이터 타입을 나타낸다.
Subscribe 메서드가 정의 되어있는 것이 보인다. 이 메서드를 이용해서 Observable에서 방출하는 이벤트를 받아서 처리한다.
그 후 아래에는 Extension으로 asObservable이 구현되어 있다.
asObservable 메서드는 Observable 자신을 반환하는 역할을 한다. 이 메서드를 통해 어떤 객체가 Observable 타입으로 쉽게 변환될 수 있다. 아래 사진참조....
ObserverType Protocol을 살펴보면 on메서드가 정의되어 있다. 이 메서드를 이용해 Observer에게 이벤트를 전달할 수 있습니다.
Event의 코드를 확인해보면 enum으로 선언되어 있습니다. Observable이 방출하는 이벤트는 next, completed, error 세 가지의 case가 있습니다. Next이벤트에는 element를 받아서 방출합니다.
element가 제네릭으로 선언되어 있기 때문에 다양한 데이터 타입도 포함할 수 있습니다. 심지어 tap과 같은 gesture까지...
여기서 observable의 Lifecycle을 짚고 가면 좋을 것 같습니다.
Create(생성) -> Subscribe(실행) -> onNext(방출) -> onCompleted or Error -> Disposed
Observable은 completed 또는 error 이벤트를 방출하기 전까지 계속 next 이벤트를 방출할 수 있습니다. error나 Completed방출시 이벤트를 방출하지 않습니다.
이런 흐름들을 시각적으로 표현한것을 Marble Diagram이라고 하는데 한번 살펴보겠습니다.
화살표는 시간의 흐름도이고, 각각의 동그라미(노드)는 Next이벤트를 의미합니다.
그리고 마지막에 있는 | 는 completed 이벤트를 의미합니다.
여기서 X는 error를 의미합니다.
자 이제 Observable에 대해 공부했으니 드디어 Observable을 생성해보겠습니다.
Observable을 생성하는 방법에는 just, of, from, create가 있는데 자주 사용하는 것들 위주로 살펴 보겠습니다.
파라미터로 Observer를 매개변수로 받는 클로저를 전달받는 Observable을 생성합니다. 매개변수로 받은 Observer의 onNext, onCompleted, onError 메서드를 직접 호출할 수 있습니다.
공식문서
create가 정의 되어 있는 부분을 살펴보면
파라미터를 보시면 Observer를 파라미터로 받고, Disposable을 반환하는 클로저를 파라미터로 반환 하는데
따라서 Create생성시 Observable의 타입을 지정해줘야한다.
사용예시
let observable = Observable<Int>.create { observer in
observer.onNext(1)
observer.onNext(2)
observer.onCompleted()
return Disposables.create()
}
단 한개의 항목만 방출하는 Observable을 생성합니다.
[공식문서ttps://reactivex.io/documentation/operators/just.html)
역시 코드로 살펴보겠습니다.
정말 직관적으로 element를 받아서 Observable을 리턴한다는 것을 알수있습니다.
let observable = Observable<Int>.just(1)
observable.subscribe(onNext: { (data) in
print(data)
}, onDisposed: {
})
정리해보자면 Just는 정말 딱 한개의 item을 방출한다는 것을 알 수 있습니다.
한개 이상의 항목을 방출하는 Observable Sequence를 생성합니다.
공식문서
코드로 보겠습니다.
정의되어 있는 부분을 보면 Variadic Parameters를 사용하고 있어 여러개의 item을 사용할 수 있다는 것이 직관적으로 보이고, ImmediateSchedulerType은 scheduler가 즉시 작업을 실행하는 방식과 관련된 프로토콜입니다. RxSwift에서 Scheduler는 특정 작업을 구독하는 시점에 어느 스레드에서 실행할지를 결정하는 역할을 합니다.
let observable = Observable.of(1, 2, 3)
observable.subscribe(onNext: { (data) in
print(data)
}, onDisposed: {
})
파라미터로 오직 하나의 배열만 받으며, 배열의 요소들을 순서대로 방출하는 Observable을 생성합니다.
공식문서
마지막 from입니다 역시, 코드로 보겠습니다.
이제 뭔가 익숙해진느낌... 파라미터로 Element? 이고, Thread지정 가능(이것도 선택사항)
let observable = Observable<Int>.from([1, 2, 3])
observable.subscribe(onNext: { (data) in
print(data)
}, onDisposed: {
})
긴글읽어 주셔서 감사합니다.