티스토리 뷰
해당 포스트는 곰튀김님의 강의영상을 개인적으로 공부한 내용을 정리한 글입니다.
자세한 내용은 영상을 직접 보시는것을 추천드립니다..!
1. Operator란?
RxSwift의 용도를 다시 정리해보면,
비동기적으로 생기는 데이터를 리턴값으로 전달하기 위해 Observable이라는 클래스로 감싸서 전달하기 위함
으로 정리할 수 있습니다.
위의 사진 2장은 이러한 RxSwift를 사용한 가장 기초적인 코드 입니다.
그런데 onError() / onNext() / onCompleted() 부터 시작해서 ~ .next() / .error() / .completed() 까지,,,,
기본적인 코드조차도 너무 써야하는 것들이 많고 복잡해 보입니다.
그래서, Rx에는 이런 귀찮은 코드들을 간편하게 줄여주는 문법들이 존재합니다!!
또한 이런 편리한 기능을 제공해주는 문법들을 RxSwift에서는 Operator라고 부릅니다!
이렇게 Observable.just를 사용하면, 5줄의 코드를 단 1줄로 작성이 가능합니다!
또한, Array내부에 있는 element들을 받아오고 싶다고 하면 Observable.from을 사용하면 됩니다.
위의 just / from은 1) 데이터를 Observable로 가공하는 시점에서 사용하는 Operator들이고,
2) 생성된 Observable을 방출하기 전 새로운 값으로 변환 하거나 (ex. filter / map .....)
3) Observable이 방출되는 과정에 영향을 주는 기능(ex. observeOn / subscribeOn .....)을 하기도 합니다.
.observeOn / .map / .filter
이처럼, Operator의 종류는 생각보다 상~~~~당히 많습니다.
그렇기 때문에,
우리는 이 모든 Operator를 다 외우는 것이 아니라 어떻게 찾아보고 사용법을 알아내는지를 공부해야 합니다!
이것을 위해서는, 공식문서인 ReactiveX에 들어가서 각 Operator 항목들을 읽어봐야합니다.
ReactiveX를 통해 Operator 알아보기
Operator를 찾아서 들어가보면 이러한 '마블그림'이 나와있는데,
이러한 마블그림을 보는 법만 익숙해진다면, 모든 operator들을 이해할 수 있을것입니다!
몇 개의 Operator들의 마블그림을 예시로 살펴보도록 하겠습니다.
1) .Just
위 사진처럼, .Just는 [하나의 데이터를 입력하면 Just라는 연산자를 통해 1개의 Observable을 방출하면서 Complete 해줍니다.]
2) .From
.from은 [1개의 Array를 입력하면 from 연산자를 통해 Array의 element들을 Observable로 방출하면서 Complete 해줍니다.]
3) .map
.map은 just / from과는 다르게 Observable로 들어온 값을 map내부의 식에 따른 값으로 변환하여 다시 Observable로 방출합니다!
4) .filter
.filter 또한 Observable로 들어오는 데이터를 다룰 때 사용하는데, filter내부 조건에 해당하는 Observable을 재방출 해줍니다.
5) .observeOn
.observeOn는 쉽게 말 하자면, 쓰레드를 교체할 때 사용합니다.
+ .subscribeOnobserveOn은 어디서 사용하든 쓰레드를 변경할 수 있지만
subscribeOn은 제일 처음 Observable을 방출하는 쓰레드 변경에만 영향을 줍니다.
즉, 중간에 subscribeOn을 호출 하더라도 중간 쓰레드가 변경되는 것이 아니라 초기 실행 쓰레드를 변경하게 되는 것입니다.
위와 같이, 순서를 observeOn -> subscribeOn으로 하더라도 subscribeOn에 의해 처음 시작 쓰레드를 ConcurrentDispatchQueue로 변경하고 이후에 observeOn에 의해서 Main Thread로 변경하게 됩니다.
RxSwift에서 데이터의 흐름을 나타내는 용어로 Stream이라는 용어를 사용합니다.
이러한 Stream은 나중에 할 일이든, 지금 할 일이든 비동기적으로 작업을 수행하기 위해 미리 만들어 놓는 통로 입니다.
(Observable == Stream 입니다.)
또한, RxSwfit에서는 이러한 Stream을 다루는 Operator들도 제공합니다.
이처럼 다양한 Operator들이 제공되는데, 그 중에서 빨간 네모로 지정한 CombineLatest / Merge / Zip을 가장 많이 사용합니다.
1. Merge
위에있는 Merge의 마블그림을 보면 알 수 있지만,
단순하게 여러개의 Observable을 합쳐서 1개의 Observable으로 방출해줍니다.
그렇기 때문에, Merge에 넣는 Observable들은 반드시 서로 같은 타입이어야 한다!
2. Zip
여러 Observable에서 1:1로 대응되는 데이터가 있을 때, 하나의 Observable로 병합하여 값을 방출합니다.
따라서, 만약 마지막에 쌍이 존재하지 않는 데이터가 발생하면 이 데이터의 경우는 무시됩니다.
또한, 쌍으로 맺어지는 Observable의 데이터 타입은 서로 달라도 상관이 없습니다.
3. CombineLatest
Zip은 여러 Observable에서 반드시 1:1로 대응되는 데이터만 Combine하여 새로운 Observable로 방출이 되는데,
CombineLatest의 경우에는, 가장 최근에 방출된 데이터끼리 쌍을 맺고 새로운 Observable로 방출합니다.
+ Combine Operator 작성 예시
'🍎 > RxSwift' 카테고리의 다른 글
[RxSwift] #6) RxSwift + MVVM패턴 [RxCocoa를 활용한 UITableView 구성] (2) | 2023.02.01 |
---|---|
[RxSwift] #5) RxSwift + MVVM패턴 [Subject를 활용해보자] (0) | 2023.01.30 |
[RxSwift] #4) Subject는 무엇일까? (1) | 2023.01.29 |
[RxSwift] #3) RxSwift + MVVM패턴 [기본 프로젝트 구성] (0) | 2023.01.29 |
[RxSwift] #1) RxSwift 개념잡기 (등장 배경 + 기본 구조) (0) | 2023.01.26 |