생성(Create) 연산자
✅ 새로운 Observable을 만드는 연산자
Just
convert an object or a set of objects into an Observable that emits that or those objects
➡️ 객체 하나 또는 객체 집합을 Observable로 변환한다. 변환 된 Observable은 원본 객체들을 emit한다.
Returns an observable sequence that contains a single element.
➡️ 단일 요소를 포함하는 Observable Sequence를 반환한다.
즉, Just는 오직 하나의 Observable을 emit한다.
let observable = Observable.just("RxSwift")
let observable<String>.just("RxSwift")
Observable을 생성할 때 just 연산자를 사용하여 단 한 개의 항목만 인자로 넘겨주면 된다. (제네릭 타입은 명시해도 되고 안 해줘도 된다.)
생성한 Observable을 subscribe하고 실행해보자.
위의 그림과 같이 콘솔에 출력 됨을 볼 수 있다.
✅ 객체 하나 또는 객체 집합을 Observable로 변환
위에서 Just의 정의에 대해 설명할 때의 코멘트이다. 객체 집합을 Observable로 변환한다는데, 어떤 의미일까?
위의 예제와 다르게 인자 값으로 ["Swft", "RxSwift"]라는 String 타입의 배열을 넘겨주었다.
결과는? Just는 오직 하나의 Observable을 emit한다고 했으니까 "Swift" 하나만 emit하지 않을까?
아니다. 배열을 인자로 넘기면, 단지(Just)!! "해당 배열 자체"를 방출한다.
만약 ["Swift", "RxSwift"]가 아니라 "Swift", "RxSwift"라는 두 개의 String을 인자로 넘기면 에러가 발생한다.
Of
This method creates a new Observable instance with a variable number of elements.
➡️ 이 메소드는 요소 수가 가변적인 새 Observable 인스턴스를 생성한다.
..? 이해하기 어려우니까 마블 다이어그램을 확인해보자.
RxMarble에서 제공하는 of에 대한 마블 다이어그램이다. 엥? 이해하기 쉽게 수정해보자.
of는 한 개 이상의 item을 emit하는구나 !
just는 오직 하나였다면, of는 한 개 이상을 emit하는구나 !
just 연산자를 통해 "Swift", "RxSwift"라는 두 개의 String을 인자로 넘겨주었다. just 연산자였으면 에러가 발생했겠지만, of는 한 개 이상의 item을 emit하므로 에러가 발생하지 않는다. 실행 결과를 보자.
순차적으로 방출하기 때문에, Swift 출력 후 RxSwift를 출력함을 볼 수 있다.
마찬가지로 인자로 두 개의 배열의 넘겨주어도 아래와 같이 배열 그 자체를 순차적으로 출력한다.
from
convert some other object or data structure into an Observable
➡️ 다른 객체나 데이터 구조를 Observable으로 변환한다.
..? 마블 다이어그램을 살펴보자.
of와 비슷하지만, From 연산자를 만나기 전에 item들이 둘러 쌓여있음을 볼 수 있다. 즉, from은 인자로 오직 하나의 배열만 받으며, 배열의 요소들을 순서대로 방출한다.
From 연산자를 이용하여 인자로 ["Swift", "RxSwift", "Yeo", "seongil"] 배열을 넘겨주었다.
한번 실행시켜보자.
just, of와 달리 배열 그 자체를 출력하지 않고, 요소를 순차적으로 출력하는 것을 볼 수 있다.
Create
create an Observable from scratch by calling observer methods programmatically
➡️ Observer 메소드를 프로그래밍 방식으로 호출하여 처음부터 Observable을 생성
You can create an Observable from scratch by using the Createoperator. You pass this operator a function that accepts the observer as its parameter. Write this function so that it behaves as an Observable — by calling the observer’s onNext, onError, and onCompleted methods appropriately.
➡️ Create 연산자를 사용하면 처음부터 Observable을 만들 수 있다. 이 연산자를 매개변수로 Observable를 받아들이는 함수를 전달한다. onNext, onError, onComplete 메소드를 적절히 Observable를 호출하여 Observable로 동작하도록 이 함수를 작성한다.
음.. 이해가 안되는데? 정의를 살펴보자.
Creates an observable sequence from a specified subscribe method implementation.
➡️ 지정된 구독 메소드 구현에서 Observable sequence를 만든다.
메소드의 정의를 보면, Observer를 인자로 받고, Disposable을 return하는 클로저를 인자로 받는다.
이해하기 쉽게 예제 코드를 살펴보자.
트레일링 클로저를 이용해서 인자로 받은 observer에게 어느 시점에 onNext를 실행할지, 어느 시점에 onCompleted 할지, 어느 시점에 onError를 방출할지를 개발자가 직접 클로저 안에서 호출할 수 있다.
✅ Disposable을 return하므로 return 값으로 Disposable을 넘겨야한다. (return Dispostables.create()의 이유)
해당 observable을 subscribe하여 실행해보면 아래와 같이 동작한다.
만약 첫번째 item만 emit하고 onCompleted를 하면 어떻게 될까?
아래의 그림처럼 emit 1만 출력하고 onCompleted!, onDisposed!가 출력 됨을 볼 수 있다.
✅ onCompleted, onError가 호출되고 난 후에는 해당 observable은 dispose되기 때문에 다른 이벤트를 emit할 수 없음.
'iOS > RxSwift' 카테고리의 다른 글
[iOS/RxSwift] Subject가 무엇일까? (0) | 2024.02.03 |
---|---|
[iOS/RxSwift] Operators - Map, Filter (0) | 2024.02.03 |
[iOS/RxSwift] Marble Diagram (0) | 2024.02.01 |
[iOS/RxSwift] Disposable, DisposeBag (0) | 2024.02.01 |
[iOS/RxSwift] Observable, Observer (0) | 2024.01.30 |