νλ‘νΌν°λΌκ³ νλ©΄ ν΄λμ€λ ꡬ쑰체μμ μ°λ λ³μ, μμ,,?
κΈ°λ³Έμ μΈ κ°λ μ΄μ§λ§ μ νν μ€λͺ νκΈ° μ΄λ ΅λ€.γ
μΆμμ λ§μ μ΄λ° κ°λ λ€μ ννννκ³ λμ΄κ°λ €νλ€.π©π»π»
νλ‘νΌν°λ ν΄λμ€, ꡬ쑰체, μ΄κ±°ν λ±μ κ΄λ ¨λ κ°μ λ»νκ³ ,
κ·Έ μ’ λ₯λ μ μ₯ νλ‘νΌν°, μ°μ° νλ‘νΌν°, νμ νλ‘νΌν°λ‘ ν¬κ² λλ μ μλ€.
π μ μ₯ νλ‘νΌν° (Stored Properties)
μ μ₯ νλ‘νΌν°λ ν΄λμ€λ ꡬ쑰체μμ
λ³μλ μμλ₯Ό μ μ₯νλ κ°μ₯ λ¨μν νλ‘νΌν°μ΄λ€.
π μ μ₯ νλ‘νΌν°μ κΈ°λ³Έ νν
κ°μ₯ κΈ°λ³Έμ μΈ ννμ μ μ₯ νλ‘νΌν° μ¬μ© λ°©λ²μ μ½λλ‘ μμ±νλ€.
struct Info1_sp {
let name: String = "μ€ν¬" // μμ μ μ₯ νλ‘νΌν°
var age: Int = 0 // λ³μ μ μ₯ νλ‘νΌν°
}
class Info2_sp {
let name: String = "μ€ν¬" // μμ μ μ₯ νλ‘νΌν°
var age: Int = 0 // λ³μ μ μ₯ νλ‘νΌν°
// μ΄λμ
λΌμ΄μ μ§μ
// => μ΄κΉκ°μ μ§μ νμ§ μμκ±°λ,
// μ§μ νλλΌλ νμ κ° λ³κ²½μ΄ μμ κ²½μ° μ΄λμ
λΌμ΄μ λ₯Ό μ§μ ν΄μ£Όμ΄μΌ νλ€.
init(age: Int) {
self.age = age
}
}
// ꡬ쑰체λ κΈ°λ³Έμ μΌλ‘ μ μ₯ νλ‘νΌν°λ₯Ό 맀κ°λ³μλ‘ κ°λ μ΄λμ
λΌμ΄μ Έκ° μλ€.
let printInfo1: Info1_sp = Info1_sp(age: 1)
// ν΄λμ€λ μ¬μ©μ μ μ μ΄λμ
λΌμ΄μ λ₯Ό νΈμΆνμ¬ μ¬μ©νλ€.
// κ·Έλ μ§ μμΌλ©΄ νλ‘νΌν° μ΄κΉκ°μ ν λΉν μ μμ΄ μΈμ€ν΄μ€ μμ±μ΄ λΆκ°νλ€.
let printInfo2: Info2_sp = Info2_sp(age: 2)
κ°κ° ꡬ쑰체, ν΄λμ€λ‘ μμ±ν Info1_spμ Info2_spκ° μλ€.
μ μ₯ νλ‘νΌν°λ μ΄κ±°νμμ μ¬μ© λΆκ°νκ³ , ꡬ쑰체μ ν΄λμ€μμλ§ κ°λ₯νκΈ°μ
κ°μ λ΄μ©μ μ½λλ₯Ό ꡬ쑰체μ ν΄λμ€λ‘ μμ±νμ¬ λΉκ΅νλ€.
π λμ μ°¨μ΄μ μ μ΄λμ λΌμ΄μ μ μ‘΄μ¬ μ 무μ΄λ€.
1) ꡬ쑰체μ κ²½μ° μ μ₯ νλ‘νΌν°λ₯Ό λͺ¨λ ν¬ν¨νλ μ΄λμ λΌμ΄μ λ₯Ό μλ μμ±νλ€.
2) ν΄λμ€λ μ μ₯ νλ‘νΌν°κ° μ΅μ λμΈ κ²½μ°λ₯Ό μ μΈνλ©΄
νλ‘νΌν°μ κΈ°λ³Έκ°μ μ§μ ν΄μ£Όκ±°λ, μ¬μ©μ μ μ μ΄λμ λΌμ΄μ λ₯Ό μ§μ ν΄μ£Όμ΄μΌ νλ€.
(κΈ°λ³Έκ°μ μ§μ νλλΌλ λμ€μ κ°μ λ³κ²½μ΄ μμ μμ μ΄λΌλ©΄ μ΄λμ λΌμ΄μ κ° νμνλ€.)
μμ μ€λͺ κ³Ό κ°μ΄ μΈμ€ν΄μ€λ₯Ό μμ±ν λ μ΄κΉκ°μ μ€μ νλ©΄ ꡬ쑰체λ , ν΄λμ€λ κ΄λ ¨ μμ΄
μ΄λμ λΌμ΄μ λ₯Ό ꡬνν΄μ€ νμκ° μμ΄μ§κΈ° λλ¬Έμ νΈλ¦¬ν΄μ§λ€.
νμ§λ§ κ·Έλ κ² λλ©΄ μλμ λ€λ₯΄κ² μΈμ€ν΄μ€κ° μ¬μ©λ κ°λ₯μ±μ΄ λ¨μμκ³ ,
μμΌλ‘ κ°μ λ³κ²½μ΄ μλλ‘ μμλ‘ μ μν΄μ£Όκ³ μΆμ΄λ
μΈμ€ν΄μ€λ₯Ό μμ±ν νμ κ°μ ν λΉν΄μ£Όμ΄μΌ νλ―λ‘ κ·Έλ΄ μ μλ€λ λ¨μ μ΄ μλ€.
μ΄λ¬ν λ¨μ μ κ°μ νκΈ° μν΄μλ μ΅μ λκ³Ό μ΄λμ λΌμ΄μ λ₯Ό μ μ ν μ¬μ©νλ©΄ λλ€.
μλμ ν΄λΉ λ°©λ²μ μ½λλ‘ μμ±ν΄λ³΄μλ€.
π μ μ₯ νλ‘νΌν°μ ν¨κ³Όμ μΈ μ¬μ© λ°©λ²
struct Place {
var placeName: String
}
class Position {
var position: Place? // νμ¬ μμΉλ₯Ό λͺ¨λ₯Όμλ μμΌλ―λ‘ μ΅μ
λλ‘ μ§μ
let name: String = "μ€ν¬"
}
// νμ κ°λ§ λ¨Όμ ν λΉνκ³ , κ°μ΄ μμ΄λ μμ΄λ μκ΄μλ νλ‘νΌν°λ
// μ΅μ
λλ‘ μ§μ νμ¬ μμΉλ₯Ό μ§μ νκ³ μΆμ λ μ§μ ν μ μλ€.
let nowPosition: Position = Position()
nowPosition.position = Place(placeName: "μ§")
print(nowPosition.name, nowPosition.position!) // μ€ν¬ Place(placeName: "μ§")
λ§μ°¬κ°μ§λ‘ κ°κ° ꡬ쑰체μ ν΄λμ€λ‘ λλ μ μ½λλ₯Ό μμ±νλ€.
μμ μ½λλ μ₯μλ₯Ό νννλ λ΄μ©μΈλ°,
μ¬λμ λꡬμΈμ§ νμλ‘ μμμΌ νλ©°, μ₯μλ λͺ¨λ₯Ό μλ μλ€κ³ κ°μ νλ€.
λ¨Όμ μ΅μ λμ΄ μλ name κ°μ λν΄μλ§ μ΄κΉκ°μ μ§μ ν΄μ£Όκ³ ,
(λ¬Όλ‘ μΆν ν λΉμ μνλ©΄ λΉμλκ³ , μ΄λμ λΌμ΄μ λ₯Ό ꡬνν΄λλλ€.)
μ΅μ λμΈ Placeμ κ²½μ°μλ λμ€μ μμΉλ₯Ό μκ² λλ©΄! κ·Έ λ ν λΉνλ©΄ λλ€.
μ΄λ κ² μ΅μ λκ³Ό μ΄λμ λΌμ΄μ λ₯Ό μ μ ν νμ©νλ©΄
λ΄κ° μλνλλ‘ κ΅¬μ‘°μ²΄μ ν΄λμ€λ₯Ό μ¬μ©ν μ μλλ‘ μ λν μ μλ€.
π μ§μ° μ μ₯ νλ‘νΌν°
μ§κΈκΉμ§ λ³Έ μ μ₯ νλ‘νΌν°λ μΈμ€ν΄μ€λ₯Ό μμ±ν κ²½μ° λͺ¨λ νλ‘νΌν°λ₯Ό μ΄κΈ°ννλ€.
νμ§λ§ μ΄ μ§μ° μ μ₯ νλ‘νΌν°λ νμν λ! κ°μ΄ ν λΉλλ€.π₯
π μΈμ€ν΄μ€ μ΄κΈ°νν λλ μ μΈλ§λκ³ , ν΄λΉ νλ‘νΌν°μ μ κ·Όν λ κ° ν λΉν¨.
μΈμ€ν΄μ€λ₯Ό μ΄κΈ°ν ν λ, κ΅³μ΄ λͺ¨λ νλ‘νΌν°λ₯Ό μ΄κΈ°νν νμκ° μμ λλ μλ€.
μ΄λ΄ λ μ§μ° μ μ₯ νλ‘νΌν°λ₯Ό μ¬μ©νλ©΄ λΆνμν μ±λ₯ μ νλ κ³΅κ° λλΉλ₯Ό μ€μΌ μ μλ€.!
μ§μ° μ μ₯ νλ‘νΌν°λ lazy ν€μλ νλλ§ λΆμ΄λ©΄ λμ΄λ€.
νμ§λ§ μ£Όμν μ μ, μ§μ° μ μ₯ νλ‘νΌν°λ νμν λ κ°μ ν λΉν΄μΌνλ―λ‘
μμλ‘λ μ¬μ©μ΄ λΆκ°νλ€. 무쑰건 varλ‘ μ μν΄μΌνλ€.
μλμ μ§μ° μ μ₯ νλ‘νΌν°λ₯Ό ꡬνν΄λ΄€λ€.
struct favoriteFruits {
var first: String = "strawberry"
var second: String = "peach"
}
class favoriteFruitsList {
lazy var fruits: favoriteFruits = favoriteFruits() // lazy ν€μλλ‘ μ§μ° μ€μ !
let name: String
init(name: String) {
self.name = name
}
}
// μ¬κΈ°μλ μμ§ favoriteFruits μμ±x
let bestFruits: favoriteFruitsList = favoriteFruitsList(name: "seolhee")
// μ΄ μ½λλ₯Ό ν΅ν΄ fruits νλ‘νΌν°λ‘ μ κ·Ό, fruits νλ‘νΌν°μ favoriteFruitsκ° μμ±λλ€.
print(bestFruits.fruits) // favoriteFruits(first: "strawberry", second: "peach")
λ΄κ° μ’μνλ κ³ΌμΌμ 보μ¬μ£Όλ μ½λλ₯Ό μμ±νλ€.
favoriteFruitsListμμλ nameμ letμΌλ‘,
favoriteFruits ꡬ쑰체λ₯Ό λ°μμ€λ fruits μ μ₯ νλ‘νΌν°λ₯Ό lazyλ‘ μ μνλ€.
λ°λΌμ 맨 μλ print ꡬ문μμ fruits νλ‘νΌν°λ‘ μ§μ μ κ·Όνλ©΄
κ·Έ λ favoriteFruitsκ° μμ±λλ€.
νμ§λ§ μ£Όλͺ©ν΄μΌ ν lazyμ νΉμ§μ΄ νλ μλλ°,
π λ€μ€μ€λ λ νκ²½μμλ μ§μ° μ μ₯ νλ‘νΌν°μ λμλ€λ°μ μΌλ‘ μ κ·Ό ν λ ν λ²λ§ μ΄κΈ°νλλ€λ 보μ₯μ ν μ μλ€.
μμ±λμ§ μμ μ§μ° νλ‘νΌν°μ λ§μ μ€λ λκ° λΉμ·ν μκΈ°μ μ κ·Όνλ©΄, μ¬λ¬ λ² μ΄κΈ°νλ μ μλ€.
λ°λΌμ μ΄ μ μ μ£Όμνμ¬ μ§μ° μ μ₯ νλ‘νΌν°λ₯Ό μ¬μ©ν΄μΌνλ€.
ν λ²λ§ μ΄κΈ°νλλλ‘ νλ €λ©΄ μ μ₯ νμ νλ‘νΌν°λ₯Ό μ¬μ©νλ©΄ λλλ°, μ΄κ±΄ λ€μ ν¬μ€ν μμ λ€λ£¨κ² λ€.
π μ 리
νλ‘νΌν°λ ꡬ쑰체, ν΄λμ€, μ΄κ±°νμμ μ°μ΄λ κ΄λ ¨λ κ°μ λ§νλλ°,
κ·Έ μ€μμλ ꡬ쑰체μ ν΄λμ€μμ λ³μλ μμμ κ°μ΄ κ°μ μ μ₯νλ κ²μ μ μ₯ νλ‘νΌν°λΌκ³ νλ€.
μ μ₯ νλ‘νΌν°λ ꡬ쑰체μμ μ¬μ©μ μ΄λμ λΌμ΄μ κ° νμ μκ³ ,
ν΄λμ€μμ μ¬μ©ν λλ μ΄κΉκ° μ§μ νκ±°λ μ΅μ λλ‘ μ§μ νμ§ μμΌλ©΄ μ΄λμ λΌμ΄μ κ° νμνλ€.
lazy ν€μλλ₯Ό μ΄μ©νλ©΄ μΈμ€ν΄μ€ μμ± μ νλ‘νΌν° μ΄κΈ°νμμ μ μΈνκ³ , νμν λ κ° ν λΉμ΄ κ°λ₯νλ€.
μ€λμ μ΄λ κ² νλ‘νΌν° μ€ μ μ₯ νλ‘νΌν°μ λν΄ μ 리νλλ°
λ€μ ν¬μ€ν μμ μ°μ° νλ‘νΌν°μ νμ νλ‘νΌν°,
κ·Έλ¦¬κ³ νλ‘νΌν° κ°μμ λ± νλ‘νΌν°μ λν΄ κΈμ μ΄μ΄λκ°λλ‘ νκ² λ€.
μ°Έκ³
- π μ€μννΈ νλ‘κ·Έλλ°
'3οΈβ£ Swift > Swift μ 리' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Swift] νλ‘νΌν° κ°λ μ 리 (3); νμ νλ‘νΌν° (2) | 2021.09.22 |
---|---|
[Swift] νλ‘νΌν° κ°λ μ 리 (2); μ°μ° νλ‘νΌν° (0) | 2021.09.22 |
[Swift] ν΄λ‘μ λ₯Ό μ¬μ©νλ μ΄μ , κ° μΊ‘μ³(Capturing Value) (0) | 2021.09.11 |
[Swift] guard / if (feat. μ΅μ λ λ°μΈλ©) (5) | 2021.09.06 |
[Swift] inout νλΌλ―Έν° (0) | 2021.09.05 |
λκΈ