[swift] 중첩된 옵저버블과의 작업 처리 방법

옵저버블은 RxSwift에서 매우 중요한 개념입니다. 이는 비동기 작업을 처리하고 그 결과를 관찰하는데 사용됩니다. 중첩된 옵저버블은 옵저버블 내에 또 다른 옵저버블이 있는 경우를 의미합니다. 이러한 상황에서는 어떻게 작업을 처리하고 결과를 추출할 수 있는지 알아보겠습니다.

중첩된 옵저버블 처리하기

중첩된 옵저버블을 다루기 위해서는 flatMap 연산자를 사용할 수 있습니다. flatMap은 옵저버블 내부의 각 요소에 대해 새로운 옵저버블을 생성하는 함수를 적용하고, 생성된 모든 옵저버블에 대한 이벤트를 하나의 옵저버블로 합쳐줍니다.

let outerObservable = Observable.just(1)
let innerObservable = Observable.just("A")

outerObservable
    .flatMap { outerValue in
        innerObservable.map { innerValue in
            return "\(outerValue) \(innerValue)"
        }
    }
    .subscribe { result in
        print(result)
    }

위의 예제는 outerObservable에 대한 각 이벤트마다 innerObservable의 값과 합치는 동작을 수행합니다. 결과적으로 출력은 다음과 같을 것입니다.

next("1 A")
completed

중첩된 옵저버블의 결과 추출하기

위의 예제에서는 중첩된 옵저버블의 결과를 문자열로 합쳐서 출력하기로 했습니다. 하지만 때로는 중첩된 옵저버블의 결과를 추출하여 작업을 진행해야 할 수도 있습니다. 이를 위해서는 flatMap의 반환값을 Observable이 아닌 다른 유형으로 변경하면 됩니다.

let outerObservable = Observable.just(1)
let innerObservable = Observable.just(2)

let result = outerObservable
    .flatMap { outerValue in
        innerObservable.map { innerValue in
            return outerValue + innerValue
        }
    }

result.subscribe { value in
    print("The result is \(value)")
}

위의 예제에서는 outerObservable의 값을 innerObservable의 값과 더해주는 연산을 수행하였습니다. 결과적으로 출력은 다음과 같을 것입니다.

The result is 3

결론

중첩된 옵저버블을 다루기 위해서는 flatMap 연산자를 사용하여 내부 옵저버블의 결과를 추출하거나 연산할 수 있습니다. 이를 통해 비동기 작업을 조합하고 강력한 RxSwift의 기능을 활용할 수 있습니다.

참조: