Future

์ œ๋„ค๋ฆญ ํด๋ž˜์Šค | ๊ฒฐ๊ตญ์—๋Š” ํ•˜๋‚˜์˜ ๊ฐ’์„ ๋‚ธ ํ›„ ์ข…๋ฃŒํ•˜๊ฑฐ๋‚˜ ์‹คํŒจํ•˜๋Š” Publisher

์ด๋‹ˆ์…œ๋ผ์ด์ €๋Š” ํ•œ ๊ฐœ์˜ ์ธ์ž๋ฅผ ๋ฐ›๋Š”๋‹ค.

  • attemptToFulfill : Publisher๊ฐ€ ์š”์†Œ๋ฅผ ๋ฐฐ์ถœํ•˜๊ฑฐ๋‚˜ ์—๋Ÿฌ๋กœ ์ข…๋ฃŒํ•  ๋•Œ Publisher๊ฐ€ ํ˜ธ์ถœํ•˜๋Š” Future.Promise

Future๋Š” Future.Promise๋ผ๋Š” ํƒ€์ž… ๋ณ„์นญ์œผ๋กœ ํด๋กœ์ €๋ฅผ ์ œ๊ณตํ•œ๋‹ค. ์ด ํด๋กœ์ €๋Š” Result ํƒ€์ž…์˜ ์ธ์ž๋ฅผ ํ•˜๋‚˜ ๋ฐ›๊ณ  ๋ฐ˜ํ™˜๊ฐ’์ด ์—†๋Š” ํ˜•ํƒœ๋‹ค.

์ด ํด๋กœ์ €๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Future์˜ ์ด๋‹ˆ์…œ๋ผ์ด์ €๋กœ ๋„˜์–ด๊ฐ€๋Š” ํด๋กœ์ €์—์„œ ์–ด๋– ํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์„ฑ๊ณตํ–ˆ์„ ๋•Œ์˜ ๊ฐ’์ด๋‚˜ ์‹คํŒจํ–ˆ์„ ๋•Œ์˜ ์—๋Ÿฌ๋ฅผ Future.Promise ํด๋กœ์ €๋กœ ์ „๋‹ฌํ•œ๋‹ค.

๊ฒฐ๊ตญ Future๋Š” ์–ด๋– ํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ ํ›„ ํ•˜๋‚˜์˜ ๊ฐ’์„ ๋‚ธ ํ›„ ์ข…๋ฃŒํ•˜๊ฑฐ๋‚˜ ์‹คํŒจํ•œ๋‹ค.

Future<Void, Error> { promise in
  // 1
  promise(.success(Void()))
  // 2
  promise(.failure(error))
}
.sink(receiveCompletion: { completion in
  switch completion {
  case .failure:
    print("Combine Future Error")
  case .finished:
    print("Combine Future Finish")
  }
}, receiveValue: {
  print("Combine Future")
})
.store(in: &cancellables)

// Combine Future
// Combine Future Finish

Future๋Š” ํ•˜๋‚˜์˜ ๊ฐ’์„ ๋‚ธ ํ›„ ์ข…๋ฃŒํ•˜๊ฑฐ๋‚˜ ์‹คํŒจํ•œ๋‹ค.

1์˜ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜๋ฉด ๊ฐ’์„ ๋‚ด๋ฏ€๋กœ Publisher๋Š” ์ข…๋ฃŒํ•œ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— 2์˜ ์ฝ”๋“œ๋Š” ํšจ๋ ฅ์ด ์—†๊ฒŒ ๋œ๋‹ค.

Future<Void, Error> { promise in
  // 1
  promise(.failure(error))
  // 2
  promise(.success(Void()))
}
.sink(receiveCompletion: { completion in
  switch completion {
  case .failure:
    print("Combine Future Error")
  case .finished:
    print("Combine Future Finish")
  }
}, receiveValue: {
  print("Combine Future")
})
.store(in: &cancellables)

// Combine Future Error

๋งˆ์ฐฌ๊ฐ€์ง€๋กœ 1์˜ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์—๋Ÿฌ๋ฅผ ๋‚ด๋ฏ€๋กœ Publisher๋Š” ์—๋Ÿฌ๋ฅผ ๋‚ธ๋‹ค.

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— 2์˜ ์ฝ”๋“œ๋Š” ํšจ๋ ฅ์ด ์—†๊ฒŒ ๋œ๋‹ค.

RxSwift

Single์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

Single<Void>.create { observer in
  observer(.success(Void()))
  // ์—๋Ÿฌ๋ฅผ ๋‚ด๋Š” ๊ฒฝ์šฐ ์œ„์˜ ์ฝ”๋“œ ๋Œ€์‹  ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘์„ฑํ•œ๋‹ค.
  // observer(.failure(error))
  return Disposables.create()
}
.subscribe(onSuccess: { print("RxSwift Future") })
.disposed(by: disposeBag)

// RxSwift Future

ReactiveSwift

ํ•ด๋‹น ๋™์ž‘์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ์˜คํผ๋ ˆ์ดํ„ฐ๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š๋Š”๋‹ค.

์ฐธ๊ณ 

Combine's Future

ReactiveX - Operator - Create

ReactiveX - Single

Last updated

Was this helpful?