μ λ² μ μ₯ νλ‘νΌν° ν¬μ€ν μ μ΄μ΄μ μ€λμ μ°μ° νλ‘νΌν°μ λν΄ μ 리νλ €κ³ νλ€,,
μ μ₯ νλ‘νΌν°λ λ³μ, μμμ λν κ°λ μΌλ‘ κ·Έλλ§ μ¬μ΄? νΈμ΄μλλ°
μ°μ° νλ‘νΌν°λ λΉκ΅μ μ΄λ €μ λΉ. κ°μ΄ 곡λΆν΄λ³΄μ..
π μ°μ° νλ‘νΌν° (Computed Properties)
κ°μ μ μ₯νλ μ μ₯ νλ‘νΌν°μ λ¬λ¦¬ μ°μ° νλ‘νΌν°λ κ°μ μ μ₯νλ 곡κ°μ΄ μλ€.
λ°λΌμ λ€λ₯Έ μ μ₯ νλ‘νΌν°λ₯Ό κ°μ Έμμ μ°μ°μ νκ³ μ μ ν κ°μ λλ €μ£Όλ μν μ νλ€.
ꡬ쑰체, ν΄λμ€, μ΄κ±°ν λͺ¨λμμ μ¬μ© κ°λ₯νκ³ μ κ·Όμ(getter), μ€μ μ(setter)κ° νμνλ€.
μ΄λ ν κ°μ κ°μ§κ³ μ°μ°, λ°ννλ€λ λΆλΆμμ λ©μλμ λΉμ·νλ€λ κ²μ μ μ μλλ°
λ©μλ λμ μ΄ μ°μ° νλ‘νΌν°λ₯Ό μ¬μ©νλ μ μ μμ보면,
1) λ©μλμ κ²½μ° μμμ λ§ν μ κ·Όμ, μ€μ μλ₯Ό κ°κ° λ°λ‘ ꡬνν΄μΌνλ€.
λ°λΌμ ꡬννλλ°μ λΆνΈν¨μ΄ μμ μ μκ³ , λΆμ°κ΅¬νλλ λ§νΌ κ°λ μ±μ΄ λλΉ μ§ κ°λ₯μ±μ΄ μλ€.
2) μ°μ° νλ‘νΌν°μ κ²½μ°μλ λ¨μ μ μ‘΄μ¬νλλ°,
λ©μλλ μ½κΈ° μ μ©, μ°κΈ° μ μ© λͺ¨λ ꡬνμ΄ κ°λ₯νμ§λ§ μ°μ° νλ‘νΌν°λ μ½κΈ° μ μ©λ§ λ§λ€ μ μλ€.
μμ μ°μ° νλ‘νΌν°μ νΉμ§λ€μ μ½λλ₯Ό ν΅ν΄ μμΈν μμ보μ.
π μ°μ° νλ‘νΌν°μ κΈ°λ³Έ νν
struct Person {
// μ°μ° νλ‘νΌν°λ μ΄λ κ² λ€λ₯Έ μ μ₯ νλ‘νΌν°λ₯Ό κΌ νμλ‘ νλ€.
var name: String = "μ€ν¬"
// κ°μ μ μ₯νλ κ²μ΄ μλλ―λ‘, νμ
μΆλ‘ λΆκ°. λ°λΌμ νμ
λͺ
μ νμ!
var selfIntroduce: String {
// μ κ·Όμ getter (λ€λ₯Έ νλ‘νΌν°μ κ°μ μ»κ±°λ μ°μ°νμ¬ λ¦¬ν΄ν λ μ¬μ©)
// => μ΄λ€ μ μ₯ νλ‘νΌν°μ κ°μ μ°μ°νμ¬ λ°νν κ²μΈμ§ return ꡬ문 νμ
get {
return "λ΄ μ΄λ¦μ \(name)μΌ??"
}
// μ€μ μ setter (λ€λ₯Έ μ μ₯ νλ‘νΌν°μ κ°μ μ μ₯ν λ μ¬μ©)
// => νλΌλ―Έν°λ‘ λ°μ κ°μ μ΄λ€ μ μ₯ νλ‘νΌν°μ μ΄λ»κ² μ€μ ν κ²μΈμ§ ꡬν
set(name) {
self.name = "λ΄ μ΄λ¦μ \(name)μΌ!!"
}
// μλμ κ°μ΄ set νλΌλ―Έν° μ§μ νμ§ μκ³ , newValueλΌλ μ΄λ¦μΌλ‘ μ¬μ©λ κ°λ₯!
/*
set {
self.name = "λ΄ μ΄λ¦μ " + newValue + "μΌ!!"
}
*/
}
}
var herName: Person = Person()
// getμ μ κ·Ό
print(herName.selfIntroduce) // λ΄ μ΄λ¦μ μ€ν¬μΌ??
// setμ μ κ·Ό
herName.selfIntroduce = "μ€ν¬"
print(herName.name) // λ΄ μ΄λ¦μ μ€ν¬μΌ!!
// --> κ·Έλ₯ μ°μ° νλ‘νΌν°(selfIntroduce)λ₯Ό μ½μΌλ©΄ getterκ° μ€ν,
// μ΄λ ν κ°μ μ
λ ₯νλ©΄ setterκ° μ€ν!
ꡬ쑰체 μμ name μ μ₯ νλ‘νΌν°μ selfIntroduce μ°μ° νλ‘νΌν°λ₯Ό ꡬννλ€.
μμμ λ§νλ―μ΄ μ°μ° νλ‘νΌν°λ λ€λ₯Έ μ μ₯ νλ‘νΌν°μ κ°μ κ°μ§κ³ μ°μ°μ μ§ννλ―λ‘
μ μ₯ νλ‘νΌν°λ₯Ό κΌ νμλ‘ νλ€. λ°λΌμ μ°μ°μ μ¬μ©ν name μ μ₯ νλ‘νΌν°λ₯Ό μμ±νλ€.
κ·Έλ¦¬κ³ selfIntroduce νλ‘νΌν°λ₯Ό 보면 varλ‘ μ μνκ³ StringμΌλ‘ νμ μ λͺ μνλ€.
π μ°μ° νλ‘νΌν°μ μ€μν νΉμ§ μ€ νλμΈλ°,
κ°μ μ μ₯νμ§ μκΈ° λλ¬Έμ 무쑰건 varλ‘ μ μλμ΄μΌ νλ©°
λ§μ°¬κ°μ§λ‘ κ°μ μ μ₯νμ§ μμΌλ―λ‘ νμ μΆλ‘ μ΄ λΆκ°νμ¬ νμ μ κΌ λͺ μν΄μΌνλ€.
μ°μ° νλ‘νΌν° λ΄λΆλ₯Ό 보면, μκΉ λ§νλ getter, setterκ° μ‘΄μ¬νλ€.
1) getterλ λ§ κ·Έλλ‘ κ°μ κ°μ Έμμ μ°μ°νμ¬ λ¦¬ν΄νλ μν μ νλ€.
: returnλ¬Έ νμ! νμ§λ§ returnμ΄λΌλ ν€μλλ μλ΅μ΄ κ°λ₯ν μλ μλλ°,
μμμ λ§νλ― μ°μ° νλ‘νΌν°λ νμ λͺ μλ₯Ό κΌ ν΄μ€μΌ νλ€.
λ°λΌμ getterμ λ°ν κ°μ΄ νλ‘νΌν° νμ κ³Ό λμΌνλ€λ©΄
return ν€μλλ₯Ό μλ΅ν΄λ κ·Έ κ²°κ΄κ°μ΄ μ κ·Όμμ λ°νκ°μ΄ λλ€.
2) setter λν λ§ κ·Έλλ‘! μ΄λ€ κ°μ μ€μ νλ μν μ νλ€.
: νλΌλ―Έν°λ‘ λ°μ κ°μ μ΄λ ν μ μ₯ νλ‘νΌν°μ μ°μ°νμ¬ μ μ₯νλ€.
λ°λΌμ setterλ νλΌλ―Έν°κ° κΌ νμνλ°, μ μ½λμ μ£Όμ μ²λ¦¬ν setμ 보면
newValue ν€μλλ₯Ό μ΄μ©νλ©΄ νλΌλ―Έν°λ₯Ό μλ΅νλ κ²λ κ°λ₯νλ€.
(μ΄μ°¨νΌ ν΄λΉ νλΌλ―Έν°μ κ°μ μ λ ₯νμ§ μκ³ μ μΈλ§ νλ©΄ get, μ λ ₯νλ©΄ setμΌλ‘ μλ λ°°μ λλ―λ‘
κ΅³μ΄ νλΌλ―Έν° μ΄λ¦μ μ€μ νμ§ μκ³ λ κ°λ₯ν κ²μ΄λ€.)
μ΄λ κ² κ΅¬μ‘°μ²΄ μμ±μ λ§μΉκ³ , μΈμ€ν΄μ€ μ΄κΈ°ν ν
get, setμ μ κ·Όνλ μ½λλ₯Ό μμ±ν κ²μ νμΈν μ μλ€.
κ°κ°μ μ κ·Όνλ λ°©λ²μ λ¨μνλ€.
κ·Έλ₯ μ°μ° νλ‘νΌν°μΈ selfIntroduceλ₯Ό μ½κΈ°λ§ νλ©΄ get,
λκ° κ°μ μ°λ©΄ setμ μ κ·Όνλ κ²μ΄λ€.π₯
κ·Έλ¦¬κ³ λ§¨ μ²μ μ°μ° νλ‘νΌν°μ λν΄ μ€λͺ νλ©° μΈκΈνλλ°,
μ°μ° νλ‘νΌν°λ getλ§ μ¬μ©νμ¬ μ½κΈ° μ μ©μΌλ‘ ꡬνμ΄ κ°λ₯νλ€.
λ§μ°¬κ°μ§λ‘ μ½λλ‘ μμ±ν΄μ νμΈν΄λ³΄μ.
π μ½κΈ° μ μ© μ°μ° νλ‘νΌν°
struct Person2 {
var name: String = "μ€ν¬"
var selfIntroduce: String {
get {
return "λ΄ μ΄λ¦μ \(name)μΌ??"
}
}
}
var herName2: Person = Person()
print(herName2.selfIntroduce) // λ΄ μ΄λ¦μ μ€ν¬μΌ??
// setμ μ κ·Ό -> μ€λ₯
// herName2.selfIntroduce = "μ€ν¬"
// print(herName2.name)
// + μΆκ°
// getλ§ μΈ λλ get ν€μλ μμ΄ κ΅¬νλ κ°λ₯νλ€.
struct Person3 {
var name: String = "μ€ν¬"
var selfIntroduce: String {
return "λ΄ μ΄λ¦μ \(name)μΌ??"
}
}
var herName3: Person = Person()
print(herName3.selfIntroduce) // λ΄ μ΄λ¦μ μ€ν¬μΌ??
Person2, Person3 ꡬ쑰체μ μ½κΈ° μ μ© νλ‘νΌν°λ₯Ό ꡬννλ€.
λ¨Όμ Person2 ꡬ쑰체 μμ selfIntroduce μ°μ° νλ‘νΌν°λ₯Ό 보면
set ν¨μλ μκ³ getλ§ μ‘΄μ¬νλ κ²μ νμΈν μ μλ€.
(λΉμ°νκ²λ μΈμ€ν΄μ€ μμ± ν get ν¨μμ μ κ·Όνλ©΄ μ μμ μΈ μλμ΄ κ°λ₯νκ³ ,
set ν¨μ μ κ·Ό μ setμ΄ μμΌλ―λ‘ μ€λ₯κ° λ°μνλ€.)
κ·Έλ¦¬κ³ μ΄ μ½κΈ° μ μ© μ°μ° νλ‘νΌν°μ κ²½μ° getλ§ μμΌλ―λ‘ get, setμ ꡬλΆν νμκ° μκ³
λ°λΌμ κ΅³μ΄ get ν€μλλ₯Ό νκΈ°νμ§ μμλ ꡬνμ΄ κ°λ₯νλ€.
μ΄ λ΄μ©μ Person3 ꡬ쑰체λ₯Ό 보면 νμΈν μ μλ€.
π μ 리
μ°μ° νλ‘νΌν°λ κ°μ μ μ₯νλ κ³΅κ° μμ΄,
λ€λ₯Έ μ μ₯ νλ‘νΌν° κ°μ λ°μμμ μ°μ° ν λ°ννλ μν μ νλ€.
ꡬ쑰체, ν΄λμ€, μ΄κ±°νμμ λͺ¨λ ꡬνν μ μλ€.
λ©μλλ‘ κ΅¬ννλ κ²μ λΉν΄ μ§κ΄μ μ΄κ³ νΈλ¦¬ν κ²μ΄ μ₯μ μ΄κ³ ,
μ½κΈ° μ μ© μ°μ° νλ‘νΌν°λ‘λ ꡬνμ΄ κ°λ₯νλ€.
λ€μ ν¬μ€ν μ νμ νλ‘νΌν°!
μ°Έκ³
- π μ€μννΈ νλ‘κ·Έλλ°
'3οΈβ£ Swift > Swift μ 리' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Swift] ARC (1); ARCμ κ°λ , Retain Count (3) | 2021.09.23 |
---|---|
[Swift] νλ‘νΌν° κ°λ μ 리 (3); νμ νλ‘νΌν° (2) | 2021.09.22 |
[Swift] νλ‘νΌν° κ°λ μ 리 (1); μ μ₯ νλ‘νΌν° (0) | 2021.09.22 |
[Swift] ν΄λ‘μ λ₯Ό μ¬μ©νλ μ΄μ , κ° μΊ‘μ³(Capturing Value) (0) | 2021.09.11 |
[Swift] guard / if (feat. μ΅μ λ λ°μΈλ©) (5) | 2021.09.06 |
λκΈ