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 |