기어가더라도 제대로

RxSwift 용어 정리 - 1 - 본문

Swift - 기초

RxSwift 용어 정리 - 1 -

Damagucci-juice 2022. 5. 9. 23:25

Observable

공식 문서에서 한국어 번역을 제공하고 있는데 이 단어만큼은 영어의 원어를 사용한다. 번역 했을 때 늬앙스를 살리기 어려운 단어라 판단한 듯하다. 보통 그런 단어는 중요도가 떨어지기 마련인데, RxSwift 에서는 중요도가 매우 높다! 직역하자면 관찰이 가능한 객체(?) 인데, 잘 와닿지는 않는다. Observer 와의 관계를 통해 이해하는 게 좋겠다.

정의하기 어려우면서 중요도까지 높다니!

Observable 과 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 or onError 호출 -> "알림"
  • onCompleted or onError 반드시 둘 중에 하나만 호출된다.

'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
Comments