Combine
ποΈ Swiftμμ μ 곡νλ ν¨μν λ°μν νλ‘κ·Έλλ°μ μν νλ μμν¬λ‘, λΉλκΈ°μ μΈ λ°μ΄ν° μ€νΈλ¦Όμ λ€λ£¨κ³ μ‘°μνλλ° μ¬μ©λλ€.
λ°μν νλ‘κ·Έλλ°μ΄λ?
λ°μν νλ‘κ·Έλλ°(Reactive Programming)μ λ°μ΄ν° μ€νΈλ¦Ό λλ λ°μ΄ν°μ λ³νμ λ°λΌ μ½λκ° μλμΌλ‘ λ°μνλ νλ‘κ·Έλλ° ν¨λ¬λ€μμ΄λ€. μ΄ ν¨λ¬λ€μμμλ λ°μ΄ν°μ λ³κ²½ μ¬νμ κ°μ§νκ³ μ΄μ λ°λΌ μ°μμ μΌλ‘ λ°μνλ λ°©μμΌλ‘ νλ‘κ·Έλ¨μ μμ±νλ€.
λ°μν νλ‘κ·Έλλ°μ λ€μκ³Ό κ°μ ν΅μ¬ κ°λ μ ν¬ν¨νκ³ μλ€.
1. λ°μ΄ν° μ€νΈλ¦Ό(Data Stream):
- μ΄λ²€νΈ μ€νΈλ¦Ό, κ°μ νλ¦ λ±κ³Ό κ°μ΄ μκ°μ λ°λΌ μ°μμ μΌλ‘ λ°μνλ λ°μ΄ν°μ νλ¦μ λνλΈλ€.
- μ΄λ¬ν λ°μ΄ν° μ€νΈλ¦Όμ μ¬μ©μ μ λ ₯, μΌμ λ°μ΄ν°, μΈλΆ APIμ μλ΅ λ± λ€μν μμ€μμ λμ¬ μ μλ€.
2. μ΅μ λ²(Observer) ν¨ν΄:
- λ°μ΄ν°μ λ³νλ₯Ό κ°μνκ³ , λ³νμ λ°λΌ νΉμ μμ μ μννλ λμμΈ ν¨ν΄μ΄λ€.
- λ³νκ° μΌμ΄λλ©΄ μ΅μ λ²(λλ ꡬλ μ)λ ν΄λΉ λ³νμ λ°μνμ¬ μλ¦Όμ λ°κ³ , νμν μμ μ μννλ€.
3. μ€νΈλ¦Όμ λ³νκ³Ό μ‘°μ(Transforming and Manipulating Streams):
- λ°μ΄ν° μ€νΈλ¦Όμ μ‘°μνμ¬ νν°λ§, λ§€ν, κ²°ν©, λ³ν λ±μ μννμ¬ μλ‘μ΄ μ€νΈλ¦Όμ μμ±νλ μμ μ΄λ€.
- μ΄λ₯Ό ν΅ν΄ λ°μ΄ν° μ€νΈλ¦Όμ ν¨κ³Όμ μΌλ‘ μ²λ¦¬νκ³ νμν ννλ‘ κ°κ³΅ν μ μλ€.
4. λ°μΈλ©(Binding):
- λ°μ΄ν°μ λ³νμ μ΄μ λ°λ₯Έ μμ μ μ°κ²°μ λνλΈλ€.
- λ°μ΄ν°μ UI μμ, λλ λ°μ΄ν°μ μμ μ¬μ΄μ μ°κ²°μ μ€μ νμ¬, λ°μ΄ν°μ λ³κ²½μ΄ λ°μνλ©΄ μ΄μ λ§μΆ° UIλ λ€λ₯Έ μμ μ μλμΌλ‘ μ λ°μ΄νΈνλ€.
- λ°μΈλ©μ λ°μ΄ν°μ λ³νμ μ°κ΄λ μμ μ΄ μλ‘ κ²°ν©λμ΄ μμ΄μ, νλμ λ³νκ° λ€λ₯Έ μμ μ μλμΌλ‘ μ λ¬λκ³ λ°μλ μ μλλ‘ ν΄μ€λ€. μ΄λ₯Ό ν΅ν΄ μ½λμ κ°λ μ±κ³Ό μ μ§λ³΄μμ±μ λμΌ μ μλ€.
- λ§μ νλ μμν¬μ λΌμ΄λΈλ¬λ¦¬λ€μ΄ λ°μν νλ‘κ·Έλλ°μ μ§μνλ©°, Swiftμμλ Combine νλ μμν¬κ° μ΄λ¬ν κ°λ μ ν¬ν¨νκ³ μμ΄ λ°μ΄ν° μ€νΈλ¦Όμ λ³νλ₯Ό μ½κ² μ²λ¦¬νκ³ λ°μνμΌλ‘ νλ‘κ·Έλλ°ν μ μλ€.
Combine μ΄λ?
Combineμ Appleμ Swift νλ‘κ·Έλλ° μΈμ΄μ ν¬ν¨λ νλ μμν¬λ‘, λΉλκΈ°μ μΈ μ΄λ²€νΈ μ€νΈλ¦Όμ μ²λ¦¬νκ³ μ‘°μνλ λ° μ¬μ©λλ€. μ΄λ ν¨μν νλ‘κ·Έλλ°κ³Ό λ°μν νλ‘κ·Έλλ° κ°λ μ κΈ°λ°μΌλ‘ νλ©°, λ°μ΄ν° μ€νΈλ¦Όμ κ°λ¨νκ² μ‘°μνκ³ μ‘°ν©ν μ μλ λꡬλ₯Ό μ 곡νλ€.
- Publisher(λ°νμ):
- λ°μ΄ν° μ€νΈλ¦Όμ μμ±νκ³ , μ΄λ²€νΈλ₯Ό λ°©μΆνλ νμ
- κ°μ λ°©μΆν μ μμΌλ©°, μ€λ₯λ₯Ό λ°©μΆνκ±°λ μμ μ΄ μλ£λμμμ μ릴 μ μλ€.
- Subscriber(ꡬλ
μ):
- Publisherμμ λ°©μΆλλ μ΄λ²€νΈλ₯Ό λ°μ μ²λ¦¬νλ νμ
- κ°μ λ°μ μ²λ¦¬νκ±°λ, μ€λ₯λ μμ μλ£ μ΄λ²€νΈλ₯Ό μ²λ¦¬νλ€.
- Operators(μ°μ°μ):
- Combine νλ μμν¬μλ λ°μ΄ν° μ€νΈλ¦Όμ μ‘°μνκ³ λ³ννκΈ° μν λ€μν μ°μ°μκ° μ 곡λλ€.
- map, filter, flatMap λ±μ μ°μ°μλ₯Ό μ¬μ©νμ¬ λ°μ΄ν° μ€νΈλ¦Όμ μ‘°μνκ³ μλ‘μ΄ ννλ‘ λ³νν μ μλ€.
- Cancellable(μ·¨μ κ°λ₯ν):
- Combineμμλ ꡬλ μ μ·¨μν μ μλ νμ μΈ Cancellableμ΄ μ 곡λλ€.
- ꡬλ μ μ·¨μν¨μΌλ‘μ¨ λ μ΄μ μ΄λ²€νΈλ₯Ό λ°μ§ μλλ‘ μ€μ ν μ μλ€.
Combine μμ
// swift μμ
import Foundation
class DataModel {
var textValue: String = ""
func updateText(to newValue: String) {
textValue = newValue
print("Value updated: \(textValue)")
}
}
let dataModel = DataModel()
dataModel.updateText(to: "Hello, Swift!")
dataModel.updateText(to: "Another value")
/*
μΆλ ₯
Value changed to: Hello, Swift!
Value changed to: Another value
*/
// didsetμ μ΄μ©ν μμ
class DataModel {
var textValue: String = "" {
didSet {
print("Value updated: \(textValue)")
}
}
}
let dataModel = DataModel()
func changeText(to newValue: String) {
dataModel.textValue = newValue
}
changeText(to: "Hello, Swift!")
changeText(to: "Another value")
/*
μΆλ ₯
Value changed to: Hello, Swift!
Value changed to: Another value
*/
// combine μμ
import Foundation
import Combine
class DataModel {
@Published var textValue: String = ""
}
let dataModel = DataModel()
let cancellable = dataModel.$textValue.sink { newValue in
print("Value changed to: \(newValue)")
}
dataModel.textValue = "Hello, Combine!"
dataModel.textValue = "Another value"
/*
μΆλ ₯
Value changed to:
Value changed to: Hello, Combine!
Value changed to: Another value
*/
- DataModel ν΄λμ€λ @Published νλ‘νΌν° λνΌλ₯Ό μ¬μ©νμ¬ textValueλ₯Ό μ μΈνλ€.
- @Published νλ‘νΌν° λνΌλ κ°μ΄ λ³κ²½λ λλ§λ€ ν΄λΉ κ°μ λ³κ²½ μ¬νμ κ²μ(publish)νλ€.
- let cancellable = dataModel.$textValue.sink { newValue in ... }μμ $textValueλ textValueμ Publisherλ₯Ό λνλΈλ€. sink μ°μ°μλ μ΄ Publisherλ₯Ό ꡬλ (subscribe)νκ³ , κ°μ λ³κ²½ μ¬νμ΄ μμ λλ§λ€ ν΄λ‘μ λ΄μ μ½λλ₯Ό μ€ννλ€.
- dataModel.textValue = "Hello, Combine!" μ½λλ textValueμ κ°μ λ³κ²½νκ³ , μ΄λ‘ μΈν΄ sink ν΄λ‘μ λ΄μ μ½λκ° μ€νλμ΄ "Value changed to: Hello, Combine!"λ₯Ό μΆλ ₯νλ€.
- dataModel.textValue = "Another value"λ λμΌν λ°©μμΌλ‘ κ°μ λ³κ²½κ³Ό ν΄λΉ λ³κ²½ μ¬νμ λν μΆλ ₯μ μ§ννλ€.
'π Today I Learned > Swift λ¬Έλ²' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Swift] Alert μλ¦Όμ°½ λμ°κΈ° (0) | 2023.12.27 |
---|---|
[Swift] RxSwift (0) | 2023.12.15 |
[Swift] μ λ€λ¦ (Generic) (0) | 2023.12.13 |
[Swift] νμ₯ (Extension) (0) | 2023.12.13 |
[Swift] νλ‘ν μ½ (0) | 2023.12.13 |