일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- UserDefaults
- 인프런
- 100 days of SwiftUI
- decode
- 오브젝트
- 동시성
- struct
- Linked List
- Algorithm
- core data
- 동기화
- Swift
- 알고리즘
- 데드락
- 비동기
- COLOR
- 프로세스 스케줄링
- 가상 메모리
- @state
- Codable
- 상호배제
- IOS
- SwiftUI
- 앨런
- 운영체제
- forEach
- Apple Developer Academy
- scrollview
- deadlock
- async
- Today
- Total
기어가더라도 제대로
RxSwift 용어 정리 - 1 - 본문
Observable
공식 문서에서 한국어 번역을 제공하고 있는데 이 단어만큼은 영어의 원어를 사용한다. 번역 했을 때 늬앙스를 살리기 어려운 단어라 판단한 듯하다. 보통 그런 단어는 중요도가 떨어지기 마련인데, RxSwift 에서는 중요도가 매우 높다! 직역하자면 관찰이 가능한 객체(?) 인데, 잘 와닿지는 않는다. Observer 와의 관계를 통해 이해하는 게 좋겠다.
정의하기 어려우면서 중요도까지 높다니!
Observable And Observer
이 둘은 관계가 특이하다. Observable 이 방송국의 전파 전달기면, Observer(이하 옵저버) 가 전파 수신기 쯤 된다. Observable 은 사실 비동기 처리를 하기 위해 만들어졌다. 작업이 끝나는 시점이 명확하지 않기 때문에, 이를 관찰하는 observer 가 있다. 그렇다면 Observable 은 무엇일까? stream 이라고 표현을 하기도 하는데 주파수 대역같기도 하다. 특정 주파수에는 방송이 나올 때도 있고 그렇지 않을 때도 있는데, Observable 에서 항목(이하 Item)이 배출되면 이를 구독하고 있던 observer 가 처리하는 구조가 된다. (오늘 처음 배웠는데 사실 둘의 개념이 명확하지는 않다)
비동기 처리를 하는 원리
옵저버에 의해 임의의 순서에 따라 병렬로 실행되고 결과가 나중에 연산된다.
라고 하는데 잘 모르겠다. 비동기 처리를 내부적으로 어떤 흐름을 타는지, GCD Queue 를 사용하는지 추후에 알게 될 것이다.
메서드 호출 ? Observable 구독 !
일반적으로 동기적인 흐름을 나타내는 메서드 호출과 달리 Observable 은 비동기 흐름을 나타내기 위해 고안되었다. 그래서 메서드를 호출하면 3단계로 나온 데이터를 사용할 수 있다.
1. 함수를 실행한다
2. 결과값을 변수에 저장한다.
3. 저장된 변수를 사용한다
let result = someFunction(someParameter)
// result 를 사용
그러나 비동기 Observable 구독은 조금 다르다.
옵저버 생성 순서(비동기 방식)
1. Observable 내에 데이터를 조회하고 변환하는 메커니즘을 정의(아직 실행은 없음)
2. Observable 이 이벤트를 발생시킨다.
3. 옵저버의 관찰자(Sentry)가 그 순간을 감지한다.
4. '1.'에서 정의한 연산을 실행해 결과를 리턴한다.
def myOnNext = { it -> }; // 필요한 연산 처리
def myObservable = someObservable(itsParameters); // Observable 정의
myObservable.subscribe(myOnNext) // 구독을 통해 옵저버를 Observable 객체에 연결
.map { } // 추가 필요한 행위를 함
.filter { }
.desposed(by: )
onNext, onCompleted, onError
observer 를 observable 에 subscribe 하고 나면, onNext, onCompleted, onError 등 메서드를 구현할 것이다.
onNext
- Observable 이 새로운 item 을 배출할 때마다 이 메서드를 호출한다.
- Observable 이 배출하는 새로운 항목을 parameter로 전달받는다.
onError
- Observable 이 새로운 Item을 배출할 때마다 이 메서드를 호출
- Observable 이 배출하는 항목을 Parameter로 전달받는다.
onCompleted
- 오류가 없다면 Observable
- 이게 한 번 실행되면 Observedr가 그 비동기 루틴은 끝
요약
onNext
호출 -> "배출"onCompleted
oronError
호출 -> "알림"onCompleted
oronError
반드시 둘 중에 하나만 호출된다.
'Swift - 기초' 카테고리의 다른 글
RxSwift 용어 정리 -3- (share, withUnretained) (0) | 2022.05.12 |
---|---|
RxSwift 용어 정리 - 2 - (0) | 2022.05.12 |
객체간 데이터 전달하는 방법 4가지 (0) | 2022.05.08 |
Notification Center 간단 사용법 (2) | 2022.03.15 |
Delegate (0) | 2022.03.11 |