https://github.com/iamchiwon/RxSwift_In_4_Hours
해당 포스팅은 위의 곰튀김님 시즌2 RxSwift + MVVM 강의와 코드를 복습할겸 정리해본 (개인 공부를 위한) 포스팅입니다.
[1교시] 개념잡기 - RxSwift를 사용한 비동기 프로그래밍
- Observable
- Observable create
- subscribe 로 데이터 사용
- Disposable 로 작업 취소
- Sugar API
- 간단한 생성 : just, from
- 필터링 : filter, take
- 데이터 변형 : map, flatMap
1. Observable
* RxSwift의 필요성 느끼기
(내 멋대로인 소제목..)
일단, 비동기로 생성되는 데이터를 쓰기 위해 completion 클로저를 이용해서 코드를 작성해 볼 것이다!
이렇게 코드를 작성하면 비동기적으로 제대로 동작을 하지만!
이런 작업을 몇번 더 하게 된다면?
위에 주석에 적은것처럼 계속 깊어지는 문제가 생기고 가독성도 당연히 안좋아지고 에러를 처리하는 데에도 문제가 생긴다
그래서 클로저로 받는 것이 아닌 리턴값을 받아서 간결하게 진행하고 싶은데..
비동기 데이터를 리턴값으로 받을 수 있을까?
"나중에 생기는 데이터" 타입을 만들어보자!
클로저를 리턴하던 코드를
"나중에생기는데이터<string?>" 으로 리턴하는 코드로 바꿔보면?
여기서 나중에생기는데이터<타입> 이런식으로 표현된 이 아이를 유틸리티로 만든 것이 바로 RxSwift..!
비동기 데이터를 리턴값으로 받게 만든 이 코드를 RxSwift에서는
나중에생기는데이터 = Observable
나중에오면 = subscribe
이렇게 쓴다..
(RxSwift 말고도 Promise Kit , Bolts 등등등 .. 이 있다고 한다.)
이렇게 RxSwift의 필요성을 느꼈으니
그럼 이것을 어떻게 사용해야하는지 정리해보자.
* 비동기로 생기는데이터를 Observable로 감싸서 리턴하는 방법
Observable의 생명주기
- Create -> Subscribe -> onNext -> onCompleted/onError -> Disposed
Observable을 Create 하고
해당 Observable을 Subscribe한 애들에게
onNext를 통해 데이터를 전달하고 전달이 끝나면 onCompleted 후 종료(Disposed), 혹은 에러가 났다면 onError 후 종료(Disposed)
여기서 주의할 점은,
Observable을 만들어도 Subscribe가 되지않는다면 실행되지않는다는 것과
dispose되어서 동작이 끝난 Observable은 재사용이 안된다는 것. -> 새로운 Subscribe가 필요함.
* Observable로 오는 데이터를 받아서 처리하는 방법
데이터를 받기 위해서는 Subscribe를 해야한다.
Subscribe를 하고 위에서 정리 했듯 next , completed, error 로 이벤트를 받아서
각 상황을 정리해도 되고 next일때만 정리해도 되고.. 등 필요에 따라 코드를 작성하면 된다.
disposable 변수를 위와 같이 만들고
Subscribe 호출의 결과값으로 리턴되는 disposable을 viewWillDisappear에서 dispose 시키면 !?
viewWillDisappear이 될때 다운로드(downloadJson) 되는 것을 취소시킬수있다.
만약 dispose 해야하는 작업이 여러개라면?!
이런식으로 배열을 만들어서 append 하는게 맞을까 ..?
위 작업보다 훨씬 간단하게 여러개를 dispose 할 수 있다.
바로 disposeBag을 사용하는 것이다 !!
2. Sugar API
위의 기본적인 코드를 여러 Sugar API로 결과를 간단하게 원하는대로 만들 수 있다 ~!
이 Sugar API(RxSwift Operator)들은 이전 포스팅들에 정리를 해놓았기 때문에
해당 포스팅에서는 따로 정리하지 않을 것이다.
https://reactivex.io/documentation/operators.html
위의 페이지에서 각 Operator마다 마블 다이어그램을 확인할 수 있으니 참고해도 좋을 것 같다!
'iOS > 개념' 카테고리의 다른 글
Test 코드 작성하기 : UnitTest, Nimble, RxTest, RxBlocking (0) | 2022.02.15 |
---|---|
[곰튀김 RxSwift + MVVM 시즌2 - 2교시] RxSwift 활용하기 - 쓰레드의 활용과 메모리 관리 (0) | 2021.12.29 |
[RxSwift] Operator 연습 4탄 : Time Based Operator (0) | 2021.12.14 |
[RxSwift] Operator 연습 3탄 : Combining Operator (0) | 2021.12.13 |
Rx (0) | 2021.11.02 |