- νλ‘νΌν°(Property) : ν΄λμ€, ꡬ쑰체 λλ μ΄κ±°ν λ±μ κ΄λ ¨λ κ°μ μλ―Έ
- λ©μλ(Method) : νΉμ νμ μ κ΄λ ¨λ ν¨μ
νλ‘νΌν°
νλ‘νΌν°λ ν¬κ² μ μ₯ νλ‘νΌν°, μ°μ° νλ‘νΌν°, νμ
νλ‘νΌν°λ‘ λλ μ μλ€.
- μ μ₯ νλ‘νΌν°(Stored Properties)
- μ°μ° νλ‘νΌν°(Computed Properties)
- νμ
νλ‘νΌν°(Type Properties)
• μ μ₯ νλ‘νΌν°
- μΈμ€ν΄μ€μ λ³μ λλ μμλ₯Ό μλ―Έ (ꡬ쑰체μ ν΄λμ€μμλ§ μ¬μ©ν μ μμ)
• μ°μ° νλ‘νΌν°
- κ°μ μ μ₯ν κ²μ΄ μλλΌ νΉμ μ°μ°μ μ€νν κ²°κ³Όκ°μ μλ―Έ (ν΄λμ€, ꡬ쑰체, μ΄κ±°νμ μ°μΌ μ μμ)
• νμ
νλ‘νΌν°
- νΉμ νμ
μ μ¬μ©λλ νλ‘νΌν° (μ μ₯, μ°μ° νλ‘νΌν°λ νΉμ νμ
μ μΈμ€ν΄μ€μ μ¬μ©λλ κ²)
- ν΄λμ€ λ³μ
β νλ‘νΌν° κ°μμ (Property Observers)
- νλ‘νΌν°μ κ°μ΄ λ³ν λ κ°μ λ³νμ λ°λ₯Έ νΉμ μμ μ μ€ννλ€.
- μ μ₯ νλ‘νΌν°μ μ μ©ν μ μμΌλ©° λΆλͺ¨ ν΄λμ€λ‘λΆν° μμλ°μ μ μλ€.
μ μ₯ νλ‘νΌν°
ν΄λμ€ λλ ꡬ쑰체μ μΈμ€ν΄μ€μ μ°κ΄λ κ°μ μ μ₯νλ νλ‘νΌν°
var ν€μλλ₯Ό μ¬μ©νλ©΄? λ³μ μ μ₯ νλ‘νΌν°
let ν€μλλ₯Ό μ¬μ©νλ©΄? μμ μ μ₯ νλ‘νΌν°
ꡬ쑰체λ μ μ₯ νλ‘νΌν°κ° μ΅μ λμ΄ μλλλΌλ, μ μ₯ νλ‘νΌν°λ₯Ό λͺ¨λ ν¬ν¨νλ μ΄λμ λΌμ΄μ λ₯Ό μλμΌλ‘ μμ±νλ€.
λ°λ©΄μ, ν΄λμ€λ μ μ₯ νλ‘νΌν°κ° μ΅μ λμ΄ μλλΌλ©΄ νλ‘νΌν° κΈ°λ³Έκ°μ μ§μ ν΄μ£Όκ±°λ μ¬μ©μ μ μ μ΄λμ λΌμ΄μ λ₯Ό ν΅ν΄ λ°λμ μ΄κΈ°νλ₯Ό ν΄μ£Όμ΄μΌ νλ€.
<ꡬ쑰체>
ꡬ쑰체λ μμ κ°μ΄ νλ‘νΌν°μ λ§λ μ΄λμ
λΌμ΄μ λ₯Ό μλμΌλ‘ μ 곡ν΄μ€λ€.
λν, μ΄λ κ² μ΄κΈ°κ°μ ν λΉν΄μ£Όλ©΄ μ λ¬μΈμλ‘ μ΄κΈ°κ°μ λκΈΈ νμκ° μλ€.
κ·Έλ¦¬κ³ κΈ°μ‘΄κ³Ό κ°μ΄ μ΄λμ
λΌμ΄μ λ‘λ μ¬μ©μ΄ κ°λ₯νλ€.
<ν΄λμ€>
ν΄λμ€λ μμ κ°μ΄ νλ‘νΌν° κΈ°λ³Έκ°μ μ§μ ν΄μ£Όμ§ μμΌλ©΄, μ΄λμ
λΌμ΄μ λ₯Ό λ°λ‘ μ μν΄ μ£Όμ΄μΌ νλ€.
ν΄λμ€λ λ§μ°¬κ°μ§λ‘ μ΄κΈ°κ°μ 미리 μ§μ ν΄μ€¬λ€λ©΄, μμ κ°μ΄ μ¬μ©μ μ μ μ΄λμ
λΌμ΄μ λ₯Ό μ¬μ©νμ§ μμλ λλ€.
μ΄κΈ°κ°μ 미리 μ€μ ν΄μ€ κ²½μ°,
β μλμ λ§μ§ μκ² μΈμ€ν΄μ€κ° μ¬μ©λ κ°λ₯μ±μ΄ μμ
β‘ μΈμ€ν΄μ€ μμ± ν, μνλ κ°μ νλ νλ ν λΉν΄μΌ ν¨
β’ ν λ² ν λΉν΄μ€ λ³κ²½μ΄ λΆκ°λ₯νλλ‘ μμλ‘ μ μνκ³ μΆμ§λ§, μΈμ€ν΄μ€ μμ± νμ κ°μ ν λΉν΄μ£Όμ΄μΌνκΈ° λλ¬Έμ λΆκ°λ₯ν¨.
μΈμ€ν΄μ€λ₯Ό μμ±ν λ, μ΄λμ λΌμ΄μ λ₯Ό ν΅ν΄ μ΄κΈ°κ°μ 보λ΄μΌνλ μ΄μ
- νλ‘νΌν°κ° μ΅μ λμ΄ μλ κ°μΌλ‘ μ μΈλμ΄ μκΈ° λλ¬Έμ νλ‘νΌν°μ κ°μ΄ κΌ μλ μνμ¬μΌ ν¨.
κ·Έλμ νλ‘νΌν° κ°μ΄ μ΅μ
λμ΄λΌλ©΄ κ΅³μ΄ μ΄κΈ°κ°μ λ£μ΄μ£Όμ§ μμλ λλ€.
μ΄λ κ² μ΅μ
λκ³Ό μ΄λμ
λΌμ΄μ λ₯Ό μν©μ λ§κ² μ¬μ©νλ©΄, λ§λ μλμ λ§κ² ꡬ쑰체μ ν΄λμ€λ₯Ό μ¬μ©ν μ μλλ‘ μ λν μ μλ€.
μ§μ° μ μ₯ νλ‘νΌν° (Lazy Stored Properties)
μ΄ νλ‘νΌν°λ νΈμΆμ΄ μμ΄μΌ κ°μ μ΄κΈ°ννλ€. μ΄λ lazy ν€μλλ₯Ό μ¬μ©νλ€.
struct Point {
var a: Int = 0
var b: Int = 0
}
class Position {
lazy var point: Point = Point() // μμΉ μ 보 κ°μ λ΄μ pointμ λν μ 보λ₯Ό μ»κΈ° μ κΉμ§ μ¬μ©ν μΌμ΄ μμ!
let name: String
init(name: String) {
self.name = name
}
}
let yegrPosition: Position = Position(name: "yegr")
μμ κ°μ΄ μ¬μ©νλλ°, μ΄ νλ‘νΌν°λ μ£Όλ‘ λ³΅μ‘ν ν΄λμ€λ ꡬ쑰체λ₯Ό ꡬνν λ μ¬μ©λλ€.
ν΄λμ€ μΈμ€ν΄μ€μ μ μ₯ νλ‘νΌν°λ‘ λ€λ₯Έ ν΄λμ€ μΈμ€ν΄μ€λ ꡬ쑰체 μΈμ€ν΄μ€λ₯Ό ν λΉν΄μΌν λ,
- μΈμ€ν΄μ€λ₯Ό μ΄κΈ°ννλ©΄μ μ μ₯ νλ‘νΌν°λ‘ μ°μ΄λ μΈμ€ν΄μ€λ€μ΄ ν λ²μ μμ±λμ΄μΌ νλ€λ©΄?
- λͺ¨λ μ μ₯νλ‘νΌν°λ₯Ό μ¬μ©ν νμκ° μλ€λ©΄?
μ΄λ° κ²½μ°μ μ§μ° μ μ₯ νΌλ‘νΌν°λ₯Ό μ¬μ©νλ©΄, λΆνμν μ±λ₯μ νλ κ³΅κ° λλΉλ₯Ό μ€μΌ μ μλ€.
μ°μ° νλ‘νΌν°
μ°μ° νλ‘νΌν°λ μ€μ κ°μ μ μ₯νλ νλ‘νΌν°κ° μλλΌ 'νΉμ μνμ λ°λ₯Έ κ°μ μ°μ°νλ νλ‘νΌν°'μ΄λ€.
- μΈμ€ν΄μ€ λ΄/μΈλΆμ κ°μ μ°μ°νμ¬ μ μ ν κ°μ λλ €μ£Όλ 'μ κ·Όμ(getter)'
- μλνλ λ΄λΆμ νλ‘νΌν° κ°μ κ°μ μ μΌλ‘ μ€μ νλ 'μ€μ μ(setter)'
μ°μ° νλ‘νΌν°λ μΈμ μ¬μ©ν κΉ?π§
- μΈμ€ν΄μ€ μΈλΆμμ λ©μλλ₯Ό ν΅ν΄ μΈμ€ν΄μ€ λ΄λΆ κ°μ μ κ·Όνλ €λ©΄, λ©μλλ₯Ό λ κ°λ₯Ό ꡬνν΄μΌνλ€. (getter, setter)
- μ΄ λ, λ λ©μλκ° λΆμ° ꡬνλμ΄ μ½λμ κ°λ μ±μ΄ λ¨μ΄μ§ μ μλ€.
struct Panda {
var name: String = "νΈλ°μ€"
var introduce: String {
get {
return "κ·μ¬μ΄ \(name)~!" // λ΄λΆ μ½λκ° ν μ€μ΄κ³ , κ²°κ³Όκ°κ³Ό νλ‘νΌν° νμ
μ΄ κ°λ€λ©΄! return μλ΅ κ°λ₯
}
set(name) { // μ΄λ κ² μ€μ μ(setter)μ 맀κ°λ³μλ‘ μνλ μ΄λ¦μ μκ΄νΈ μμ λͺ
μν΄μ£Όλ©΄, set λ©μλ λ΄λΆμμ μ λ¬λ°μ μ λ¬μΈμλ₯Ό μ¬μ©ν μ μλ€.
self.name = "ν볡ν \(name)"
}
}
}
var baoName: Panda = Panda()
// getμ μ κ·Ό
baoName.introduce // κ·μ¬μ΄ νΈλ°μ€~!
// setμ μ κ·Ό
baoName.introduce = "μμ΄λ°μ€"
baoName.name // ν볡ν μμ΄λ°μ€
// μ°μ°νλ‘νΌν°λ₯Ό μ½μΌλ©΄ getterκ° μ€νλκ³ , κ°μ μ
λ ₯νλ©΄ setterκ° μ€νλλ€.
μ΄λ κ² μ°μ° νλ‘νΌν°λ₯Ό μ¬μ©νλ©΄ νλμ νλ‘νΌν°μ μ κ·Όμ(getter)μ μ€μ μ(setter)κ° λͺ¨λ λͺ¨μ¬μκ³ ,
ν΄λΉ νλ‘νΌν°κ° μ΄λ€ μν μ νλμ§ λͺ
ννκ² ννμ΄ κ°λ₯νλ€.
struct Panda {
var name: String = "νΈλ°μ€"
var introduce: String {
get {
"κ·μ¬μ΄ \(name)~!"
}
}
}
var baoName: Panda = Panda()
baoName.introduce // κ·μ¬μ΄ νΈλ°μ€~!
baoName.introduce = "μμ΄λ°μ€" // error: Cannot assign to property: 'introduce' is a get-only property
λμΉμ μ μ€μ ν νμκ° μλ€λ©΄ μμ κ°μ΄ get λ©μλλ§ μ¬μ©νμ¬ μ½κΈ° μ μ©μΌλ‘ μ°μ° νλ‘νΌν°λ₯Ό μ¬μ©ν μ μλ€.
(λ¨, setλ§ μ¬μ©νλ κ²μ λΆκ°λ₯)
νλ‘νΌν° κ°μμ(Property Observers)
νλ‘νΌν°μ κ°μ΄ λ³κ²½λ¨μ λ°λΌμ μ μ ν μμ
μ μ·¨ν μ μλλ‘ νλ‘νΌν° κ°μ΄ μλ‘ ν λΉλ λλ§λ€ νΈμΆλλ 'νλ‘νΌν° κ°μμ'κ° μλ€.
<λ€μ κ²μλ¬Ό>
- νλ‘νΌν° κ°μμ
- νμ
νλ‘νΌν°
'Swift' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Swift] νλ‘νΌν°(Property) β‘ - νμ (0) | 2024.06.04 |
---|---|
[Swift] AutomaticDimension (0) | 2024.06.03 |
[Swift] for-in κ³Ό forEach (0) | 2024.05.21 |
Swift μΈμ΄λ? (0) | 2024.02.19 |