[RxSwift] Observable 배워보기
Observable?
Observable
은 Reactivex에서 중요한 개념입니다. Reactivex에서는 옵저버에 의해 임의의 순서에 따라 병렬로 실행되고 결과는 나중에 연산됩니다. 메소드 호출보다는 Observable안에 데이터를 조회하고 변환하는 작업을 정의한 후 Observable이 이벤트를 발생시키면 옵저버의 관찰자가 감지하고 준비된 연산을 실행시켜 결과를 리턴합니다. 이 방법은 의존관계가 없고 코드량이 많을때 한번에 여러개의 코드를 실행 시킬 수 있어서 실행기간이 짧아진다는 장점이 있습니다.
Observable 생성
비동기 코드 흐름
- 비동기 메소드 호출로 결과를 리턴받고 필요한 동작을 처리하는 메서드를 정의한다: 이 메서드는 옵저버의 일부가 된다.
- Observable로 비동기 호출을 정의한다.
- 구독을 통해 옵저버를 Observable 객체에 연결 시킨다(또한, 동시에 Observable의 동작을 초기화 한다).
- 필요한 코드를 계속 구현한다; 메서드 호출로 결과가 리턴될 때마다, 옵저버의 메서드는 리턴 값 또는 (Observable이 배출하는)항목들을 사용해서 연산을 시작한다.
import RxSwift
func ObservableItem(element: [Int]) -> Observable<Int> {
return Observable<Int>.create { observer -> Disposable in
for item in items {
observer.onError(print(error))
break
}
observer.onNext(item)
}
observer.onCompleted()
return Disposable.create()
}
이 코드에서 우리는 Int 타입의 observable을 생성하였습니다. 여기서 중요한 메소드인 onNext, onError, onCompleted에 대하여 설명하겠습니다.
- onNext - Observable은 새로운 항목들을 배출할때마다 미 베소드를 호출합니다. Observable이 배풀하는 항목을 파라미터로 전달 받습니다.
- onError - Observabled이 기대하는 데이터가 생성되지 않았거나 다른 이유로 오류가 발생하였을때 오류를 알리기 위해서 이 메소드를 호출합니다. 이 메소드가 호출되면 더이상 onNext와 onCompleted가 호출되지 않습니다.
- onCompleted - 오류가 발생하지 않았다면 Observable은 마지막 onNext를 호출한후 이 메소드를 호출합니다.
Cold Observable & Hot Observable
- Cold Observable - 옵저버가 subscribe되는 시점부터 이벤트를 생성하여 방출하기 시작합니다. 옵저버마다 별도의 Observable이 필요합니다. 대표적인 예로는 HTTP요청이 있습니다.
- Hot Observable - 생성과 동시에 이벤트를 방출하기 시작합니다. 그리고 subscribe와는 상관없이 옵저버들에게 이벤트를 중간부터 전송해줍니다. 여러 옵저버가 하나의 Observable을 공유할 수 있습니다. 대표적인 예로는 UIEvent, Property, Timer등이 있습니다.
-
Author And Source
이 문제에 관하여([RxSwift] Observable 배워보기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@gomminjae/RxSwift-Observable-배워보기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)