ํฐ์คํ ๋ฆฌ ๋ทฐ
ํํ ๊ฐ๋ฐ์ ํ ๋ ๋ง์ด ๋ฃ๋ ์กฐ์ธ์ด ์์ต๋๋ค.
"์ข์ iOS๊ฐ๋ฐ์๊ฐ ๋๋ ค๋ฉด, ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์ ์ ๊ฒฝ์ ๋ง์ด ์จ์ผํด~~"
์๊ณ ๋ฆฌ์ฆ ๊ณต๋ถ๋ฅผ ํ ๋๋ '๋ฉ๋ชจ๋ฆฌ ์ต์ ํ'์ ๋ง์ ๊ณต์ ๋ค์ด๊ณ ๋ ํ์ง๋ง,
์ฌ์ค App๊ฐ๋ฐ์ ์์ด์๋ ๋ฉ๋ชจ๋ฆฌ ์ต์ ํ๋ ๊ฐํ ํ์์ ์ ๋๋ค.
์ฐ๋ฆฌ๋ ๋์ฒด๋ก ์๊ณ ๋ฆฌ์ฆ์ ํ ๋ '๋์ ํ ๋น' ์ด๋ผ๋ ๋ฐฉ๋ฒ์ ํตํด์ ๋ฉ๋ชจ๋ฆฌ์์ฉ๋์ ์ค์ด๋๋ฐ,
๋ง์ฐฌ๊ฐ์ง๋ก iOS ๊ฐ๋ฐ์๋ run-time์ ๋ณ์๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ํ ๋นํ๋ lazy๋ผ๋ ๋ฌธ๋ฒ์ ์ฌ์ฉํฉ๋๋ค!
์ ํ์ ๊ณต์ ๋ฌธ์๋ฅผ ์ฐพ์๋ณด๋ฉด lazy์ ๋ํด ์ด๋ ๊ฒ ์ ์๋์ด ์์ต๋๋ค. (์ ๊ฐ ์ดํดํ ๋๋ก ์์ฒด๋ฒ์ญ ํ์์ต๋๋ค,,)
lazy property๋ ์ด property๋ฅผ ์ค์ ๋ก ์ฌ์ฉํ๊ธฐ ์ ๊น์ง๋, ์ด๊ธฐ๊ฐ์ ๊ณ์ฐํ์ง ์๋ property์ ๋๋ค.
์ ์ ๋, property์์ lazy๋ฅผ ๋ถ์์ผ๋ก์จ ์ด property๊ฐ lazy property์์ ๋ํ๋ผ ์ ์์ต๋๋ค.
๋ ผ๋ฆฌ ์์ฒด๋ ์๊ณ ๋ฆฌ์ฆ์ ๋์ ํ ๋น๊ณผ ๋งค์ฐ ํก์ฌํ์ฃ ?
๋ํ,
์ ์ ๋, lazy๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ let(์์) ์์ lazy๋ฅผ ์ฌ์ฉํด์๋ ์๋ฉ๋๋ค.
๋ฐ๋์ var(๋ณ์)๋ก ์ฌ์ฉํ์ธ์!!
์ด๊ฑด ๋ญ,,, ๋น์ฐํ ์ด์ผ๊ธฐ๊ฒ ์ฃ ?
[ํด๋น property๊ฐ ์ฌ์ฉ๋๊ณ ๋ ์ดํ์, ์ด๊ธฐํ๊ฐ ๋๋ค] ๊ฐ ์ด lazy์ ์ ์์ธ๋ฐ, ๋น์ฐํ ์์๋ก ์์ฑํด์ฃผ๋ฉด ์๋ฉ๋๋ค!
//: Playground - noun: a place where people can play
import UIKit
struct InterviewCandidate {
var isiOS:Bool?
lazy var iOSResumeDescription: String = {
return "I am an iOS developer"
}()
lazy var androidResumeDescription: String = {
return "I am an android developer"
}()
}
var person1 = InterviewCandidate()
person1.isiOS = true
if person1.isiOS! {
print(person1.iOSResumeDescription)
} else {
print(person1.androidResumeDescription)
}
์์ ์์๋ฅผ ๋ณด๋ฉด,
isiOS์ ๊ฐ์ ๋ฐ๋ผ์ iOSResumeDescription๊ฐ ํธ์ถ๋๋์ง / androidResumeDescription๊ฐ ํธ์ถ๋๋์ง๊ฐ ๊ฒฐ์ ๋ฉ๋๋ค.
๊ทธ๋ฐ๋ฐ, ๊ฐ property๋ ๋ชจ๋ lazy var๋ก ์ ์ธ์ด ๋์ด์์ต๋๋ค!
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ iOSResumeDescription๊ฐ ํธ์ถ ๋๋ ์์ ์์๋ androidResumeDescription๋ ์์ง ํธ์ถ๋ ์ ์ด ์์ผ๋
androidResumeDescription๊ฐ์ ์ด๊ธฐํ๋์ด ์์ง ์์ต๋๋ค!
๋ฐ๋์ ๊ฒฝ์ฐ๋ ๋ง์ฐฌ๊ฐ์ง์ ๋๋ค~!
+
lazy rules:
1) lazy๋ let๊ณผ ํจ๊ป ์ฌ์ฉํ ์ ์์ต๋๋ค!
2) ์ฐ์ฐ ํ๋กํผํฐ์ ํจ๊ป ์ฌ์ฉํ ์ ์์ต๋๋ค.
-> ์ฌ์ค ์ด๊ฒ๋ ๋น์ฐํ ๋ง์ธ๋ฐ, ์ฐ์ฐ ํ๋กํผํฐ๋ getter / setter๊ฐ ๋ชจ๋ ๋์ํ๊ณ ๋์์ผ ๊ฐ์ ๋ฐํํ๊ธฐ ๋๋ฌธ!
3) struct๋ class์ ๋ฉค๋ฒ๋ก๋ง ์ฌ์ฉํ ์ ์์ต๋๋ค.
4) lazy property๋ ์๋์ผ๋ก ์ด๊ธฐํ๋์ง ์๊ธฐ ๋๋ฌธ์ thread unsafe ์ ๋๋ค!
[์ฐธ๊ณ ์๋ฃ] : https://abhimuralidharan.medium.com/lazy-var-in-ios-swift-96c75cb8a13a
'๐ > Swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift] associatedtype๊ฐ ๋ฌด์์ด๋? (0) | 2023.03.07 |
---|---|
[Swift] @discardableResult ๋? (0) | 2023.03.06 |
[Swift] final ํค์๋๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋?? (0) | 2023.02.08 |