μλ νμΈμ μ μΈμ λλ€!
μ§λ κ²μκΈμ μ΄μ΄ νλ‘νΌν° 2ν(lazyκΉμ§ ν©μΉλ©΄ 3ν..)μΌλ‘ νλ‘νΌν° μ΅μ λ²μ λν΄μ μ 리ν΄λ³΄λ €κ³ ν©λλ€.
νλ‘νΌν° μ΅μ λ²λ UI μ λ°μ΄νΈκ° νμν λ μ μ©νκ² λ§μ΄ μ¬μ©νκ² λλ κ² κ°μμ(λ¬Όλ‘ Rxλ‘ λΉλκΈ°μ μΌλ‘ μ λ°μ΄νΈ λλλ‘ μ²λ¦¬ν΄μ€ μλ μκ² μ§λ§..) μ μ 리ν΄λλ©΄ μ’μ κ² κ°μ΅λλ€!!
νλ‘νΌν° μ΅μ λ²λ₯Ό μ΄ν΄νκΈ° μν΄μλ μ μ₯ νλ‘νΌν°, μ°μ° νλ‘νΌν°μ λν μ΄ν΄κ° νμνλ κ°λ μ΄ μ μμ‘νμλ€λ©΄ μλ κ²μκΈλ€μ μ½κ³ μ€μλ κ²μ μΆμ²λ립λλ€~!
1) μ μ₯ νλ‘νΌν°(Stored Properties)μ μ°μ° νλ‘νΌν°(Computed Properties)
2) μ§μ° μ μ₯ νλ‘νΌν°(Lazy Stored Properties)
νλ‘νΌν° μ΅μ λ² (Property Observers)
νλ‘νΌν°μλ μ κ°μ΄ μ€μ (set) λ λλ§λ€ μ΄ μ΄λ²€νΈλ₯Ό κ°μ§ν μ μλ νλ‘νΌν° μ΅μ λ²λ₯Ό μ 곡ν©λλ€.
νλ‘νΌν° μ΅μ λ²λ νλ‘νΌν°μ κ°μ΄ μλ‘ ν λΉλ λλ§λ€ νΈμΆλκΈ° λλ¬Έμ νλ‘νΌν°μ κ°μ΄ λ³κ²½λ¨μ λ°λΌ μ μ ν μμ μ μ·¨ν μ μμ΅λλ€.
μ΄ λ, λ³κ²½λλ κ°μ΄ νμ¬μ κ°κ³Ό λμΌνλλΌλ νΈμΆλ©λλ€.
μ§μ°(lazy) μ μ₯ νλ‘νΌν°λ₯Ό μ μΈνκ³ , μ μλ μ μ₯ νλ‘νΌν°μ νλ‘νΌν° μ΅μ λ²λ₯Ό μΆκ°ν μ μμ΅λλ€.
λν, νλ‘νΌν° μ¬μ μ(override)λ₯Ό ν΅ν΄ μμλ°μ νλ‘νΌν°(μ μ₯ νλ‘νΌν°, μ°μ° νλ‘νΌν° λ λ€ κ°λ₯)μλ νλ‘νΌν° μ΅μ λ²λ₯Ό μΆκ°ν μ μμ΅λλ€. μμλ°μ§ μμ μ°μ° νλ‘νΌν°μλ νλ‘νΌν° μ΅μ λ²λ₯Ό μ¬μ©ν νμκ° μμΌλ©° ν μλ μμ΅λλ€. μ°μ° νλ‘νΌν°λ setterμμ κ°μ λ³νλ₯Ό κ°μ§ ν μ μκΈ° λλ¬Έμ΄μ£ ! κ·Έλμ λ°λ‘ μ΅μ λ²λ₯Ό μ μν νμκ° μμ΅λλ€.
μ΅μ λ²λ₯Ό μΆκ°ν μ μλ νλ‘νΌν°
1. μ μ₯ νλ‘νΌν° (lazy μ μΈ)
2. μμλ°μ μ μ₯, μ°μ° νλ‘νΌν°
νλ‘νΌν° μ΅μ λ² λ©μλ
νλ‘νΌν° μ΅μ λ²μλ νλ‘νΌν°μ κ°μ΄ λ³κ²½λκΈ° μ§μ μ νΈμΆλλ willSet λ©μλμ κ°μ΄ λ³κ²½λ μ§νμ νΈμΆλλ didSet λ©μλ μ΄λ κ² λ κ°μ§κ° μμ΅λλ€. νλμ νλ‘νΌν°μ λν΄ νλ λλ λ κ°μ§ λ©μλ λͺ¨λ μ μ ν μ μμ΅λλ€!
willSet λ©μλμμλ μ κ°μ νλΌλ―Έν°λͺ μ, didSetμμλ λ³κ²½λκΈ° μ κ°μ νλΌλ―Έν°λͺ μ μ§μ ν μ μλλ°, 맀κ°λ³μλͺ μ λ°λ‘ μ§μ νμ§ μμΌλ©΄ κΈ°λ³Έ κ°μΌλ‘ willSet λ©μλμλ newValueκ°, didSet λ©μλμλ oldValue λΌλ μ΄λ¦μ΄ μλ μ§μ λ©λλ€.
- willSet: κ°μ΄ μ μ₯λκΈ° λ°λ‘ μ§μ μ νΈμΆ λ¨ (κΈ°λ³Έ 맀κ°λ³μλͺ : newValue)
- didSet: μ κ°μ΄ μ μ₯λκ³ λ μ§νμ νΈμΆ λ¨ (κΈ°λ³Έ 맀κ°λ³μλͺ : oldValue)
νλ‘νΌν° μ΅μ λ²λ₯Ό μμ μ½λλ‘ μ΄ν΄λ΄ μλ€!
class Account {
var credit: Int = 0 { // μ μ₯ νλ‘νΌν°
willSet {
print("μμ‘μ΄ \(credit)μμμ \(newValue)μμΌλ‘ λ³κ²½λ μμ μ
λλ€.")
print(newValue)
}
didSet {
print("μμ‘μ΄ \(oldValue)μμμ \(credit)μμΌλ‘ λ³κ²½λμμ΅λλ€.")
print(oldValue)
}
}
}
let myAccount: Account = Account()
// Print: μμ‘μ΄ 0μμμ 1000μμΌλ‘ λ³κ²½λ μμ μ
λλ€.
// Print: 1000
myAccount.credit = 1000
// Print: μμ‘μ΄ 0μμμ 1000μμΌλ‘ λ³κ²½λμμ΅λλ€.
// Print: 0
μμ μ½λλ myAccountλΌλ μ΄λ¦μ μΈμ€ν΄μ€λ₯Ό μμ±νκ³ , ν΄λΉ μΈμ€ν΄μ€μ creditμ΄ λΌλ μ μ₯ νλ‘νΌν°μ κ°μ 1000μΌλ‘ λ³κ²½ν΄μ£Όλ μμ μ λλ€. willSetκ³Ό didSet λ©μλ λͺ¨λ μΆκ°ν΄μ£ΌμκΈ° λλ¬Έμ creditμ κ°μ΄ λ°λκΈ° μ§μ , μ§νμ κ° λ©μλμμ μ€μ ν νλ¦°νΈλ¬Έμ΄ μΆλ ₯λλ κ²μ νμΈν μ μμ΅λλ€!
μ¬κΈ°μ ν κ°μ§ μ£Όμν μ μ, willSetμ 맀κ°λ³μ newValueλ λ³κ²½'λ ' κ°μ μ λ¬λ°κ³ , didSetμ 맀κ°λ³μ oldValueλ λ³κ²½λκΈ° 'μ ' κ°μ μ λ¬λ°λλ€λ κ²μ λλ€! λ¬Όλ‘ κΈ°λ³Έ 맀κ°λ³μ μ΄λ¦μ΄ μ§κ΄μ μ΄μ΄μ λ°λ‘ μ΄ν΄ν μ μκ² μ§λ§, didSetμ κ²½μ° κ°μ΄ λ³κ²½λ νμ νΈμΆλκΈ° λλ¬Έμ 맀κ°λ³μκ° λ³κ²½λ κ°μ λ΄κ³ μμ κ²λ§ κ°μ λλμ΄κΈ° λλ¬Έμ(?) ν λ² μ§κ³ λμ΄κ°λ©΄ μ’μ κ² κ°μμ! μμμλ νμΈν μ μλ―μ΄ creditμ κ°μ μ΄λ―Έ 1000μΌλ‘ λ³κ²½λμμ§λ§ νλ¦°νΈ λλ κ°μ μ΄μ μ κ°μΈ 0μ΄λΌλ μ !!
class Account {
var credit: Int = 0 { // μ μ₯ νλ‘νΌν°
willSet {
print("μμ‘μ΄ \(credit)μμμ \(newValue)μμΌλ‘ λ³κ²½λ μμ μ
λλ€.")
}
didSet {
print("μμ‘μ΄ \(oldValue)μμμ \(credit)μμΌλ‘ λ³κ²½λμμ΅λλ€.")
}
}
var dollarValue: Double { // μ°μ° νλ‘νΌν°
get {
return Double(credit) / 1000.0
}
set {
credit = Int(newValue * 1000)
print("μμ‘μ \(newValue)λ¬λ¬λ‘ λ³κ²½ μ€!!")
}
}
}
class ForeignAccount: Account {
override var dollarValue: Double { // μ°μ° νλ‘νΌν° μ¬μ μ
willSet {
print("μμ‘μ΄ \(dollarValue)λ¬λ¬μμ \(newValue)λ‘ λ³κ²½λ μμ ")
}
didSet {
print("μμ‘μ΄ \(oldValue)λ¬λ¬μμ \(dollarValue)λ‘ λ³κ²½λ¨")
}
}
}
let myAccount: ForeignAccount = ForeignAccount()
// Print1: μμ‘μ΄ 0μμμ 1000μμΌλ‘ λ³κ²½λ μμ μ
λλ€.
myAccount.credit = 1000
// Print2: μμ‘μ΄ 0μμμ 1000μμΌλ‘ λ³κ²½λμμ΅λλ€.
// Print3: μμ‘μ΄ 1.0λ¬λ¬μμ 2.0λ‘ λ³κ²½λ μμ
// Print4: μμ‘μ΄ 1000μμμ 2000μμΌλ‘ λ³κ²½λ μμ μ
λλ€.
// Print5: μμ‘μ΄ 1000μμμ 2000μμΌλ‘ λ³κ²½λμμ΅λλ€.
myAccount.dollarValue = 2 // Print6: μμ‘μ 2.0λ¬λ¬λ‘ λ³κ²½ μ€!!
// Print7: μμ‘μ΄ 1.0λ¬λ¬μμ 2.0λ‘ λ³κ²½λ¨
print(myAccount.credit) // 2000
μμ λ΄€λ μ½λμ μ°μ° νλ‘νΌν°μ κ΄λ ¨ν μ½λλ₯Ό μΆκ°ν΄λ³΄μμ΅λλ€!
Account ν΄λμ€μ μ κ·Όμ, μ€μ μκ° λͺ¨λ ꡬνλ dollarValueλΌλ μ°μ° νλ‘νΌν°λ₯Ό μΆκ°νκ³ , Accoutλ₯Ό μμ λ°λ μμ ν΄λμ€μΈ ForeignAccountλΌλ ν΄λμ€μμ ν΄λΉ μ°μ° νλ‘νΌν°λ₯Ό overrideνμ¬ νλ‘νΌν° μ΅μ λ²λ₯Ό μΆκ°ν΄μ£Όμμ΅λλ€.
νλ¦°νΈλ¬Έμ μ 보면 μΈμ μ΄λ€ λ©μλκ° νΈμΆλλμ§ νμ ν μ μμ κ² κ°μλ°μ! λ¨Όμ , νλ¦°νΈ 1, 2λ²μ λΆλͺ¨ ν΄λμ€μ μ μ₯ νλ‘νΌν° κ°(credit)μ λ°κΏ λ κ° λ³κ²½ μ§μ , μ§νμ willSet, didSetμ΄ κ°κ° νΈμΆλμ΄ νλ¦°νΈλ κ²μ λλ€.
μ΄μ νλ¦°νΈ3~7λ²μ μ΄ν΄λ΄ μλ€. μ°μ° νλ‘νΌν°μΈ dollarValueμ μλ‘μ΄ κ°μΈ 2λ₯Ό μΈν νλ©΄, set λ©μλκ° νΈμΆ(νλ¦°νΈ6)λ κ²μ λλ€!
κ·Έλ¦¬κ³ , μμ ν΄λμ€μμ μ¬μ μλ₯Ό ν΅ν΄ νλ‘νΌν° μ΅μ λ²λ₯Ό μΆκ°ν΄μ£ΌμκΈ° λλ¬Έμ 2λΌλ μλ‘μ΄ κ°μ μΈν νκΈ° μ§μ , μ§νμ μ΅μ λ² λ©μλκ° νΈμΆλ κ²μ λλ€! λν, μ°μ° νλ‘νΌν°μ set λ©μλ μμμ creditμ΄λΌλ μ μ₯ νλ‘νΌν°μ κ°μ λ³κ²½ν΄μ£Όκ³ μκΈ° λλ¬Έμ creditμ μ΅μ λ² λ©μλλ€λ ν¨κ» νΈμΆλ©λλ€!! myAccountμ creditμ νλ¦°νΈλ¬Έμ ν΅ν΄ νμΈν΄λ³΄λ©΄ setterμμ μ°μ°ν κ²°κ³ΌμΈ 2000μ΄ μ°νλ κ²μ νμΈν μ μμ΅λλ€.
μ μλ³μμ μ§μλ³μ
νλ‘νΌν° μ΅μ λ²λ μ§μλ³μ λΏλ§ μλλΌ μ μλ³μμλ μ¬μ©ν μ μμ΅λλ€. (μ°μ° νλ‘νΌν° κΈ°λ₯λ κ°λ₯)
μμμ μ΄ν΄λ³Έ μμ λ€μ λͺ¨λ ν΄λμ€ μμμ μ μΈλ μ§μλ³μλ€μ΄μλλ°μ, ν¨μλ λ©μλ, ν΄λ‘μ , ν΄λμ€, ꡬ쑰체, μ΄κ±°ν λ±μ λ²μ λ°μμ μ μΈνλ λ³μλ€μλ λͺ¨λ νλ‘νΌν° μ΅μ λ² κΈ°λ₯μ μ¬μ©ν μ μμ΅λλ€!
μ°Έκ³
- μ μλ³μ: ν¨μ, λ©μλ, ν΄λ‘μ λλ type context μΈλΆμ μ μλλ λ³μ
- μ§μλ³μ: ν¨μ, λ©μλ λλ closure context λ΄μμ μ μλλ λ³μ
μ μλ³μ λλ μ μ μμλ μ§μ° μ μ₯ νλ‘νΌν°μ²λΌ μ²μ μ κ·Όν λ μ΅μ΄λ‘ μ°μ°μ΄ μ΄λ£¨μ΄μ§λλ€. κ·Έλ κΈ° λλ¬Έμ lazy ν€μλλ₯Ό μ¬μ©νμ¬ μ°μ°μ λ¦μΆ νμκ° μμ΅λλ€. λ°λλ‘ μ§μλ³μ λ° μ§μ μμλ μ λλ‘ μ§μ° μ°μ°λμ§ μκΈ° λλ¬Έμ μ€μ λ‘ μ¬μ©λ λ μ΄κΈ°ννκ³ μΆλ€λ©΄ lazy ν€μλλ₯Ό μ΄μ©ν΄μ£Όμ΄μΌ ν©λλ€!
[μ°Έκ³ μλ£]
'π iOS > Swift' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Swift] μ λ ¬ λ©μλ μ 볡νκΈ° (sort(), sorted()) (0) | 2023.10.23 |
---|---|
[Swift] νλ‘νΌν°(Properties) - νμ νλ‘νΌν° (0) | 2023.04.02 |
[Swift] νλ‘νΌν°(Properties) - μ μ₯ νλ‘νΌν°, μ°μ° νλ‘νΌν° (2) | 2023.04.01 |
[Swift] lazy ν€μλ (0) | 2023.03.18 |
[Swift] enumerated() (0) | 2023.01.07 |