(Swift) μ μ₯ νλ‘νΌν° , μ°μ° νλ‘νΌν° , νλ‘νΌν° μ΅μ λ² (propery observer)
Property
Propertyλ?
Class, Struct, Enumμ μμλ μμλ λ³μλ₯Ό λ§νλ€. νλ‘νΌν°μ μ’ λ₯λ ν¬κ² 3κ°μ§λ‘ λΆλ₯ ν μ μλ€.
- μ μ₯ νλ‘νΌν°(Stored Property)
- μ°μ° νλ‘νΌν°(Computed Property)
- νμ νλ‘νΌν°(Type Property)
μ μ₯ νλ‘νΌν°(Stored Property)
- μΌλ°μ μΌλ‘ μ°λ
let
,var
λ‘ μ μΈνλ μΈμ€ν΄μ€ λ³μ, νΉμ μμλ₯Ό λ§νλ€. - κ°μ μ μ₯ν λ μ¬μ©
- ꡬ쑰체, ν΄λμ€μμλ§ μ¬μ©κ°λ₯
μ§μ° μ μ₯ νλ‘νΌν°(Lazy stored property)
- νΈμΆ λκΈ° μ μλ κ°μ μ΄κΈ°ν νμ§ μλλ€.
- λ°λΌμ λΆνμν μ±λ₯μ ν, λ©λͺ¨λ¦¬ μ¬μ©μ μ€ μΌ μ μλ€.
- ν΄λμ€, ꡬ쑰체μλ§ μ¬μ©μ΄ κ°λ₯νλ€.
- μμμλ μ¬μ©ν μ μλ€. → μμλ μΈμ€ν΄μ€κ° μμ ν μμ±λκΈ° μ μ μ΄κΈ°ν ν΄μΌνλ―λ‘....
lazy
μ μ΄μΈλ¦¬μ§ μλλ€.
lazy var instance = MyClass()
λ€λ§ λ€μ€ μ€λ λμμ νλμ lazy
νλ‘νΌν°μ λμμ μ κ·Όνλ€λ©΄ λ°λμ νλ²λ§ μ΄κΈ°ν λλ€λ 보μ₯μ μλ€. (μ¬λ¬λ² μ΄κΈ°ν λ μ μλ€.)
μ°μ° νλ‘νΌν°(Computed Property)
- κ°μ μ μ₯νλ νλ‘νΌν°κ° μλλ€.
- νΉμ μνμ λ°λΌ μ°μ°μ μ€νν κ²°κ³Όκ°
- ν΄λμ€, ꡬ쑰체, μ΄κ±°νμλ μ¬μ© κ°λ₯
getter (μ½λλ€λ κ°λ )
getter: μΈμ€ν΄μ€ λ΄λΆ, μΈλΆμ κ°μ μ°μ°νμ¬ μ μ ν κ°μ λλ €μ£Όλ μν μ΄λ€. κ·Έλ¦¬κ³ μ°μ°λ κ°μ μ μ₯ν νλ‘νΌν°κ° μμ΄μΌνλ€.(νμλ μλμ§λ§ μΌλ°μ μΌλ‘)
setter (μ°λλ€λ κ°λ )
setter: νλ‘νΌν° κ°μ κ°μ μ μΌλ‘ μ€μ νλ μν μ΄λ€. (λ΄λΆκ° μλνλ κ²½μ°μ μ μ©), 맀κ°λ³μ μ΄λ¦μ μλ΅νλ©΄ newValue
λ₯Ό ν΅ν΄ μ κ·Όν μ μλ€.
μ½κΈ° μ μ©μΌλ‘ ꡬννκ³ μΆλ€λ©΄ getterλ§ μμ±ν΄μ£Όλ©΄ λλ€.
import Foundation
struct Money {
static let rate = 1200
var won: Int
var dollar: Float {
get{
return Float(self.won / Money.rate)
// rateλ νμ
νλ‘νΌν°μ΄λ―λ‘ selfκ° μλλΌ νμ
μ μ κ·Όνμ¬ μ¬μ©νλ€.
}
set(newDollar){
self.won = Int(newDollar) * 1200
//dollar = newDollar ->>>> νλ¨ λ΄μ©μ μ£Όμν μ μ°Έκ³ .
}
}
}
var money = Money(won: 40000)
print("40000won -> ",money.dollar, "$") // 40000won -> 33.0 $
money.dollar = 100
print("100dollar -> ",money.won, "won") // 100dollar -> 120000 won
κ·Έλ¬λ©΄ μ ν¨μ(λ©μλ)κ° μλλΌ μ°μ° νλ‘νΌν°λ₯Ό μΈκΉ?
- μΈμ€ν΄μ€ μΈλΆμμ λ©μλλ₯Ό ν΅ν΄ μΈμ€ν΄μ€ λ΄λΆλ‘ μ κ·Όνλ €λ©΄ λ©μλλ₯Ό λκ° κ΅¬νν΄μΌνλ€. λ°λΌμ μ°μ° νλ‘νΌν°λ₯Ό μ°λ νΈμ΄ κ°λ μ±μ΄ μ’κ³ , μ§κ΄μ μ΄λ€.
- νλ‘νΌν°λ₯Ό μ΄κΈ°ν ν λ κ°μ κ²μ¦νλ λͺ©μ μΌλ‘ μ¬μ©ν λ
- λ€λ₯Έ νλ‘νΌν°μ μμ‘΄νλ νλ‘νΌν°λ₯Ό κ΄λ¦¬ν λ.
- μλνλ νλ‘νΌν° μ¬μ©.
μ£Όμν μ
get, setμ μκΈ° μμ μ νλ‘νΌν°λ₯Ό μ¬μ©νλ©΄ recursiveνκ² μμ μ getμ΄λ setμ νΈμΆνκ²λλ―λ‘ μ΄λ κ² μ¬μ©νλ©΄ μλλ€. μ¦ μ μ½λμμ 보면 dollar
λ΄λΆμ get
μ΄λ set
λΈλ½μμ dollar
λ₯Ό μ¬μ©νλ©΄ μλλ€.
νμ νλ‘νΌν°(Type Property)
static
ν€μλλ₯Ό μ¬μ©νμ¬ μ μΈνλ€.- μΈμ€ν΄μ€κ° μλλΌ, νΉμ νμ μμ μ¬μ©νλ€.
- λ°λΌμ νμ μ체μ μνλ νλ‘νΌν°μ΄λ©°, κ°μ΄ κ³ μ νλ€.
- λͺ¨λ μΈμ€ν΄μ€κ° 곡ν΅μΌλ‘ μ¬μ©νλ κ°μ μ¬μ©νλ€.
- μ μ₯νλ‘νΌν°, μ°μ°νλ‘νΌν° λͺ¨λ μ¬μ© κ°λ₯νλ€.
Property Observers (didSet , willSet)
νλ‘νΌν°μ κ°μ΄ λ³κ²½λ λ λ§λ€ νΈμΆλλ€. didSet
μ κ°μ΄ λ³κ²½λκΈ° μ§μ . willSet
μ κ°μ΄ λ³κ²½λ μ§νμ νΈμΆλλ€.
didSet
κ°μ΄ λ³κ²½λκΈ° μ§μ μ νΈμΆλλ€.
λ³κ²½λκΈ° μ κ°(oldValue)μ΄ λ§€κ°λ³μλ‘ νλ μλ€. λ°λ‘ μ΄λ¦μ μ§μ νμ§ μμΌλ©΄ oldValue
λ‘ μ¬μ© κ°λ₯νλ€.
willSet
κ°μ΄ λ³κ²½λ μ§νμ νΈμΆλλ€.
λ³κ²½λ νμ κ°(newValue)μ΄ λ§€κ°λ³μλ‘ νλ μλ€. λ§μ°¬κ°μ§λ‘ λ°λ‘ μ΄λ¦μ μ§μ νμ§ μμΌλ©΄ oldValue
λ‘ μ¬μ© κ°λ₯νλ€.
- νλ‘νΌν° μ΅μ λ²λ₯Ό μ¬μ©νλ €λ©΄, κ°μ΄ λ°λμ μ΄κΈ°νλμ΄μμ΄μΌνλ€.
- νμ¬μ κ°μ κ°μ ν λΉνλλΌλ νλ‘νΌν° μ΅μ λ²λ νΈμΆλλ€.
- μ°μ° νλ‘νΌν°μλ μ¬μ© λΆκ°νλ€. νμ§λ§ μμλ°μ μ°μ° νλ‘νΌν°μλ overrideλ₯Ό ν΅ν΄ μ¬μ© κ°λ₯νλ€. μ¦, λΆλͺ¨ ν΄λμ€μ μ°μ°νλ‘νΌν°κ° μλ€. μ¬κΈ°μλ νλ‘νΌν° μ΅μ λ²λ₯Ό μ¬μ© λͺ»νμ§λ§, μμλ°μ μμν΄λμ€μμλ μ΄ νλ‘νΌν°λ₯Ό override νμ¬ νλ‘νΌν° μ΅μ λ²λ₯Ό μ μνμ¬ μ¬μ©ν μ μλ€.