๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐ŸŽ iOS

[RxSwift] Observable

by hyebin (Helia) 2024. 6. 7.
๋ฐ˜์‘ํ˜•

Observable ์ด๋ž€?

Observable์€ RxSwift์—์„œ ๋ฐ์ดํ„ฐ์˜ ์ŠคํŠธ๋ฆผ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ๋‹จ์ˆœํžˆ ๋งํ•˜์ž๋ฉด, Observable์€ ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ์—ฌ๋Ÿฌ ๊ฐ’์„ ๋ฐฉ์ถœํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ฐ’๋“ค์€ ์‚ฌ์šฉ์ž ์ž…๋ ฅ, ๋„คํŠธ์›Œํฌ ์š”์ฒญ ์‘๋‹ต, ํŒŒ์ผ ์ž…์ถœ๋ ฅ ๋“ฑ ๋‹ค์–‘ํ•œ ์†Œ์Šค์—์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Observable์€ ์„ธ ๊ฐ€์ง€ ์œ ํ˜•์˜ ์ด๋ฒคํŠธ๋ฅผ ๋ฐฉ์ถœํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด๋Š” next, error, completed์ž…๋‹ˆ๋‹ค.

  • next
    • Observable์ด ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ ์š”์†Œ๋ฅผ ๋ฐฉ์ถœํ•  ๋•Œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
    • Observable์€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ next ์ด๋ฒคํŠธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • error
    • ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ๋ฐฉ์ถœ๋˜๋ฉฐ, ์ดํ›„์—๋Š” ๋” ์ด์ƒ์˜ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • completed
    • Observable์ด ๋ชจ๋“  ๋ฐ์ดํ„ฐ ์š”์†Œ์˜ ๋ฐฉ์ถœ์„ ์™„๋ฃŒํ–ˆ์Œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
    • ์ดํ›„์—๋Š” ๋” ์ด์ƒ์˜ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

Observable ์ƒ์„ฑํ•˜๊ธฐ

RxSwift์—์„œ Observable์„ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์—ฌ๋Ÿฌ ๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์€ Observable.just, Observable.of, Observable.from ๋“ฑ์˜ ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

// ๋‹จ์ผ ์š”์†Œ๋ฅผ ํฌํ•จํ•˜๋Š” Observable ์ƒ์„ฑ
let observable1 = Observable.just("Hello, RxSwift!")

// ์—ฌ๋Ÿฌ ์š”์†Œ๋ฅผ ํฌํ•จํ•˜๋Š” Observable ์ƒ์„ฑ
let observable2 = Observable.of("Hello", "RxSwift")

// ๋ฐฐ์—ด์˜ ์š”์†Œ๋ฅผ ๊ฐœ๋ณ„ ์š”์†Œ๋กœ ๋ฐฉ์ถœํ•˜๋Š” Observable ์ƒ์„ฑ
let observable3 = Observable.from(["Hello", "RxSwift"])

 

Observable ๊ตฌ๋…ํ•˜๊ธฐ

Observable์—์„œ ์ด๋ฒคํŠธ๋ฅผ ์ˆ˜์‹ ํ•˜๋ ค๋ฉด, subscribe ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌ๋…ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. subscribe ๋ฉ”์„œ๋“œ๋Š” Observable์ด ๋ฐฉ์ถœํ•˜๋Š” ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•  ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์ธ์ž๋กœ ๋ฐ›์Šต๋‹ˆ๋‹ค.

observable1.subscribe { event in
    print(event)
}

 

Observable์˜ ์ƒ๋ช…์ฃผ๊ธฐ

Observable์€ ๊ตฌ๋…์ด ์‹œ์ž‘๋  ๋•Œ ํ™œ์„ฑํ™”๋˜๊ณ , completed ๋˜๋Š” error ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ RxSwift์˜ Disposable์„ ํ†ตํ•ด ๊ด€๋ฆฌ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํ•„์š” ์—†์–ด์ง„ ๊ตฌ๋…์„ ์ ์ ˆํ•˜๊ฒŒ ํ•ด์ œํ•˜์—ฌ ๋ฆฌ์†Œ์Šค ๋ˆ„์ˆ˜๋ฅผ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

let subscription = observable1.subscribe(onNext: { element in
    print(element)
})

// ๊ตฌ๋… ํ•ด์ œ
subscription.dispose()

 

์ด์ฒ˜๋Ÿผ RxSwift์˜ Observable์€ ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ๊ฐ„๊ฒฐํ•˜๊ณ  ํšจ์œจ์ ์œผ๋กœ ๋งŒ๋“ค์–ด์ฃผ๋Š” ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆผ์„ ์‰ฝ๊ฒŒ ์ƒ์„ฑ, ๋ณ€ํ™˜, ๊ตฌ๋…ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด ์ฃผ๋ฉฐ, ๋ณต์žกํ•œ ๋น„๋™๊ธฐ ์ฝ”๋“œ๋ฅผ ๋” ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ณ  ๊ด€๋ฆฌํ•˜๊ธฐ ์‰ฌ์šด ๋ฐฉ์‹์œผ๋กœ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ค๋‹ˆ๋‹ค.

๋ฐ˜์‘ํ˜•

'๐ŸŽ iOS' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[RxSwift] RxSwift๋ž€?  (0) 2024.06.03
[SwiftUI] Text  (0) 2024.04.18
[SwiftUI] Stack (VStack/HStack/ZStack)  (0) 2024.04.08
[SwiftUI] Property Wrappers  (0) 2024.04.04
[๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ] ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ž€?  (0) 2023.09.18