asynchronus(비동기)
observable(관찰 가능한)
functional(함수의)
via schedulers(스케줄러를 통해)
📡 RxSwift
RxSwift는 '본질적'으로 코드가 '새로운 데이터에 반응'하고 '순차적으로 분리 된' 방식으로 처리함으로써 '비동기식' 프로그램 개발을 간소화합니다.
Asynchronous
사전적으로 "동시에 발생하지 않는" 이라는 의미를 가지고 있습니다.
즉 iOS에서는 한 가지 일을 처리하는 동시에 다른 일도 함께 처리하는 것을 말합니다.
iOS 개발 안에서 비동기 프로그래밍이 쓰이는 경우
- 버튼을 눌렀을 때 이벤트 반응
- 텍스트 필드에 포커스가 잡힌 경우
- 인터넷에서 크기가 큰 이미지 파일을 받는 경우
- 디스크에 데이터를 저장하는 경우
- 오디오를 실행하는 경우
RxSwift 이전 경험했던 비동기 프로그래밍
(Apple은 iOS SDK 내에서 비동기식 코드를 작성할 수 있도록 다양한 API를 제공하고 있어요!)
- NotificationCenter
- Delegate 패턴
- Closures
- Grand Central Dispath(GCD)
일반적으로 대부분의 클래스들은 비동기적으로 작업을 수행하고 모든 UI 구성 요소들은 본질적으로 비동기적으로 동작합니다.
따라서 내가 어떤 앱 코드를 작성했을 때 정확히 매번 어떤 순서로 작동하는 지 가정하는 것은 불가능하겠죠!
결국!✨ 앱의 코드는 사용자 입력, 네트워크 활동 또는 기타 OS 이벤트와 같은 다양한 외부 요인에 따라 완전히 다른 순서로 실행될 수 있습니다.
Apple의 SDK내의 API를 통한 복합적인 비동기 코드는 부분별로 나눠서 쓰기 매우 어려울 수 밖에 없고 추적 불가합니다.
옵저버는 Subscribe
메서드를 통해서 Observable
을 구독하고 onNext
, onError
, onCompleted
라는 메소드를 구현하게 됩니다.
onNext
:Observable
이 배출하는 값을 파라미터로 전달받는다. (next
를 전달 받음)onError
:Observable
이 원하던 값이 아니거나 오류가 발생하면 이 메서드를 호출하고 오류 정보 객체를 파라미터로 전달받고onNext
나onCompleted
메서드는 호출되지 않는다.(error
를 전달 받음)onCompleted
:Observable
은 제일 마지막에 이 메소드를 호출한다.(completed
를 전달 받음)
📢 Subscribe가 호출되기 전까지 Observable은 선언만 된 상태이기 때문에 어떠한 event도 일어나지 않아요!
즉, subscribe가 호출되어야만 observable이 생성되는 것!
subscribe는 Observable의 stream을 구독(관찰) 하는 역할을 합니다.
1) Finite observable sequences
: 값을 방출한 뒤, 성공 or 에러를 통해 종료된다.
2) Infinite observable sequences
: 무한한 sequence, 무한 하게 관찰 가능한 sequence (보통 UI 이벤트)
Observable의 subscribe들은 모두 Disposable 를 반환합니다.
subscribe()의 리턴타입인 Disposable에서 disposed(by:)메소드를 호출하면 사용할 수 있습니다!
구독을 dispose하기 위해 사용하거나 실행 취소를 위해 dispose를 사용합니다.
1) Disposables
2) BooleanDisposable
3) CompositeDisposable
Subscription마다 각각 dipose를 관리하는 것은 리스크가 있기에 DiposeBag을 지원합니다!
DisposableBag에 담긴 Disposable은 DisposableBag이 해제되는 시점에 모두 함께 해제되어집니다.