μλ νμΈμ μ μΈμ λλ€ :)
μμ¦μ μλ‘μ΄ κ²λ€μ 곡λΆνκΈ° λ³΄λ€ λΆμ‘±ν κ²λ€μ κΌΌκΌΌνκ² μ±μ보μλ μκ°μΌλ‘ κ·Έλμ μ νν λͺ¨λ₯΄κ³ λμ΄κ°λ ꡬλ©λ λΆλΆλ€μ μ±μλ³΄λ €κ³ λ Έλ ₯νκ³ μλλ°μ! κ·Έλ¬λ€λ³΄λ Swift, iOS κΈ°λ³ΈκΈ°λ₯Ό λ ννν, μμΈνκ² κ³΅λΆν΄μΌκ² λ€λ μκ°μ΄ λ€λλΌκ΅¬μ..(μ¬μ€ κΈ°λ³Έμ§μμ΄ μ μΌ μ€μνλκΉμ) κ·Έλμ μκ°λ λλ§λ€ μ 리νλ κ²λ€μ ν°μ€ν 리μλ κΈ°λ‘ν΄λ³΄λ €κ³ ν©λλ€. μ€λμ lazy ν€μλ, μ§μ° μ μ₯ νλ‘νΌν°μ λν΄μ μ 리ν΄λ³΄λ €κ³ νλλ°μ, lazy ν€μλλ₯Ό μ μ¬μ©νλμ§μ μ΄μ μ λ§μΆ°μ μ 리ν΄λ³΄λλ‘ νκ² μ΅λλ€!
Lazy Stored Properties (μ§μ° μ μ₯ νλ‘νΌν°)
The Swift Language Guideμ λ°λ₯΄λ©΄, μ§μ° μ μ₯ νλ‘νΌν°λ λ€μκ³Ό κ°μ΅λλ€.
μ§μ° μ μ₯ νλ‘νΌν°λ κ°μ΄ μ²μμΌλ‘ μ¬μ© λκΈ° μ μλ κ³μ°λμ§ μλ νλ‘νΌν°μ λλ€. μ§μ° μ μ₯ νλ‘νΌν°λ‘ μ μΈνκΈ° μν΄μλ νλ‘νΌν°μ μ μΈ μμ lazy ν€μλλ₯Ό λΆμ΄λ©΄ λ©λλ€.
lazy μ μ¬μ©νλμ?
μ§μ° μ μ₯ νλ‘νΌν°λ μ μ¬μ©νλ κ²μΌκΉμ?
μ μ§λ¬Έμ λν λ΅λ³μ λ©λͺ¨λ¦¬λ₯Ό ν¨μ¨μ μΌλ‘ κ΄λ¦¬νκΈ° μν΄μ! λΌκ³ κ°λ¨νκ² ν μ μμ κ² κ°μλ°μ,
μ’ λ νμ΄μ μ€λͺ ν΄λ³΄μλ©΄, iOSλ Appμ μ¬μ©λμ΄ λ무 λμμ§λ©΄ μ±μ κ°μ λ‘ μ’ λ£μν€κΈ° λλ¬Έμ κ°λ°μλ μ²μλΆν° λ©λͺ¨λ¦¬ κ΄λ¦¬λ₯Ό μ κ²½μ°λ©° μ½λλ₯Ό μ§λκ² λ§€μ° μ€μν©λλ€. 볡μ‘ν μ±μΌμλ‘ λ·°κ° λ‘λλ λ λͺ¨λ μΈμ€ν΄μ€λ₯Ό μμ±νμ¬ λ©λͺ¨λ¦¬μ μ¬λ¦¬λ©΄ κ³ΌλΆνλ‘ μ±μ΄ μ’ λ£λ κ°λ₯μ±μ΄ λμ΅λλ€. μ΄λ¬ν μν©μ λ°©μ§νκΈ° μν΄ lazy ν€μλλ₯Ό μ¬μ©ν΄μ κ° μΈμ€ν΄μ€λ€μ΄ μ€μ λ‘ μ¬μ©λ λ μμ±λλλ‘ νμ¬ λ©λͺ¨λ¦¬λ₯Ό ν¨μ¨μ μΌλ‘ κ΄λ¦¬νλ κ²μ λλ€!
lazy ν€μλλ₯Ό λΆμ¬μ μ§μ° μ μ₯ νλ‘νΌν°λ‘ μ μΈνλ©΄, ν΄λΉ νλ‘νΌν°κ° μ²μ μ¬μ©λκΈ° μ κΉμ§λ λ©λͺ¨λ¦¬μ μ¬λΌκ°μ§ μμ΅λλ€. (ν΄λΉ λ³μκ° μ²μ μμ²λμμ λ μ¬μ©μ μ§μ ν¨μλ₯Ό ν΅ν΄ μμ±λ¨)
μ€μ λ‘ μ΄λ»κ² μ¬μ©λλμ§ The Swift Language Guideμ λμμλ μμ μ½λλ‘ μ΄ν΄λ³΄κ² μ΅λλ€.
class DataImporter {
/*
DataImporterλ μΈλΆ νμΌμμ λ°μ΄ν°λ₯Ό κ°μ Έμ€λ ν΄λμ€μ
λλ€.
μ΄ ν΄λμ€λ μ΄κΈ°ν νλλ° λ§€μ° λ§μ μκ°μ΄ μμλλ€κ³ κ°μ νκ² μ΅λλ€.
*/
var filename = "data.txt"
// λ°μ΄ν°λ₯Ό κ°μ Έμ€λ κΈ°λ₯μ ꡬνμ΄ μ΄ λΆλΆμ ꡬνλΌ μλ€κ³ κ°μ
}
class DataManager {
lazy var importer = DataImporter() // lazyλ₯Ό μ¬μ©ν΄ μ§μ° μ μ₯ νλ‘νΌν°λ‘ μ μΈ
var data = [String]()
// λ°μ΄ν°λ₯Ό κ΄λ¦¬νλ κΈ°λ₯μ΄ μ΄ λΆλΆμ ꡬνλΌ μλ€κ³ κ°μ
}
let manager = DataManager()
manager.data.append("Some data")
manager.data.append("Some more data")
// DataImporter μΈμ€ν΄μ€λ μ΄ μμ μ μμ±λΌ μμ§ μμ΅λλ€.
DataImporterλΌλ ν΄λμ€λ μ€μ λμ€ν¬ νμΌμμ λ°μ΄ν°λ₯Ό κ°μ Έμ€κΈ° λλ¬Έμ μ΄κΈ°νμ λ§μ μκ°μ΄ μμλμ΄ μ΄ ν΄λμ€λ₯Ό μ§μ° νλ‘νΌν°(lazy var importer = DataImporter()) λ‘ μ μΈν΄λ κ²μ νμΈν μ μμ΅λλ€. κ·Έλ°λ°, μμ μ½λμμ μ§μ° μ μ₯ νλ‘νΌν°λ‘ μ μΈν΄λ impoterλΌλ λ³μλ μ¬μ©λμ§ μκ³ μμ£ ? κ·Έλ¬λ©΄ ν΄λΉ μΈμ€ν΄μ€λ μμ±λμ§ μμ΅λλ€!
print(manager.importer.filename)
// the DataImporter μΈμ€ν΄μ€κ° μμ±λμμ΅λλ€.
// "data.txt" νμΌμ μΆλ ₯ν©λλ€.
λ€μ μμ μ½λλ₯Ό μμ±ν΄μ€λ€λ©΄, μ΄μ μμΌ(= μ€μ importer νλ‘νΌν°μ μ²μ μ κ·Όνκ² λ λ) importer μΈμ€ν΄μ€λ μμ±λ©λλ€.
μ΄λ κ² μ²μλΆν° μ¬μ©λμ§ μλ νλ‘νΌν°λΌλ©΄, νΉμ μ μ¬μ©λμ§ μκ±°λ μν©μ λ°λΌ μμ μ¬μ©λμ§ μμ μλ μλ νλ‘νΌν°λΌλ©΄ lazy ν€μλλ₯Ό ν΅ν΄ λΆνμν ν λΉκ³Ό μ€νμ λ°©μ§νμ¬ λΆνμν μ±λ₯ μ νλ λ©λͺ¨λ¦¬ κ³΅κ° λλΉλ₯Ό μ€μΌ μ μμ΅λλ€.
lazy ν€μλ μ¬μ© μ μ£Όμν μ
lazy ν€μλλ₯Ό μ¬μ©ν λ λͺ κ°μ§ μ£Όμν΄μΌν μ λ€μ΄ μμ΅λλ€.
1. λ³μ(var)μλ§ λΆμΌ μ μμ΅λλ€.
μ§μ° νλ‘νΌν°λ λ°λμ λ³μ(var)λ‘ μ μΈν΄μΌ ν©λλ€. μλνλ©΄ μμλ μ΄κΈ°νκ° λκΈ°μ μ νμ κ°μ κ°λ νλ‘νΌν°μΈλ°, μ§μ° νλ‘νΌν°λ μ²μ μ¬μ©λκΈ° μ μλ κ°μ κ°μ§ μλ νλ‘νΌν°μ΄κΈ° λλ¬Έμ μμλ lazyλ‘ μ μΈλ μ μμ΅λλ€.
2. struct, class
lazyλ structμ classμμλ§ μ¬μ©ν μ μμ΅λλ€.
3. μ°μ° νλ‘νΌν°(Computed Property)μλ μ¬μ©ν μ μμ΅λλ€.
μ°μ° νλ‘νΌν°μλ lazy ν€μλλ₯Ό μ¬μ©ν μ μμ΅λλ€.
lazyλ μ²μ μ¬μ©λ λ λ©λͺ¨λ¦¬μ κ°μ μ¬λ¦¬κ³ κ·Έ μ΄νμ κ³μ λ©λͺ¨λ¦¬μ μ¬λΌμ¨ κ°μ μ¬μ©(μ²μ κ°μ΄ κ³μ μ μ§λ¨)ν©λλ€. λλ¬Έμ μ¬μ©ν λλ§λ€ κ°μ μ°μ°νλ computed propertyμλ μ¬μ©ν μ μμ΅λλ€.
3. lazy λ³μλ thread safeνμ§ μμ΅λλ€.
μ§μ° νλ‘νΌν°κ° μ¬λ¬ μ€λ λμμ μ¬μ©λ λ, μ§μ° νλ‘νΌν°κ° ν λ²λ§ μ€νλλ κ±Έ 보μ₯νμ§ μμ΅λλ€.
κ·Έλ κΈ° λλ¬Έμ λ€μ€ μ€λ λ νκ²½μμ μμ±λμ§ μμ μ§μ° μ μ₯ νλ‘νΌν°μ λ§μ μ€λ λκ° λΉμ·ν μμ μ μ κ·Όνλ€λ©΄, μ¬λ¬ λ² μ΄κΈ°νλ μ μμ΅λλ€.
[μ°Έκ³ μλ£]
'π iOS > Swift' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Swift] νλ‘νΌν°(Properties) - νλ‘νΌν° μ΅μ λ² (0) | 2023.04.02 |
---|---|
[Swift] νλ‘νΌν°(Properties) - μ μ₯ νλ‘νΌν°, μ°μ° νλ‘νΌν° (2) | 2023.04.01 |
[Swift] enumerated() (0) | 2023.01.07 |
[Swift] κ³ μ°¨ν¨μ - map, filter, reduce (1) | 2022.11.29 |
[Swift] νμ μΆλ‘ κ³Ό νμ μ΄λ Έν μ΄μ (0) | 2022.07.31 |