Property
Property๋?
Class, Struct, Enum์ ์์๋ ์์๋ ๋ณ์๋ฅผ ๋งํ๋ค. ํ๋กํผํฐ์ ์ข
๋ฅ๋ ํฌ๊ฒ 3๊ฐ์ง๋ก ๋ถ๋ฅ ํ ์ ์๋ค.
- ์ ์ฅ ํ๋กํผํฐ(Stored Property)
- ์ฐ์ฐ ํ๋กํผํฐ(Computed Property)
- ํ์
ํ๋กํผํฐ(Type Property)
์ ์ฅ ํ๋กํผํฐ(Stored Property)
- ์ผ๋ฐ์ ์ผ๋ก ์ฐ๋
let
, var
๋ก ์ ์ธํ๋ ์ธ์คํด์ค ๋ณ์, ํน์ ์์๋ฅผ ๋งํ๋ค.
- ๊ฐ์ ์ ์ฅํ ๋ ์ฌ์ฉ
- ๊ตฌ์กฐ์ฒด, ํด๋์ค์์๋ง ์ฌ์ฉ๊ฐ๋ฅ
์ง์ฐ ์ ์ฅ ํ๋กํผํฐ(Lazy stored property)
- ํธ์ถ ๋๊ธฐ ์ ์๋ ๊ฐ์ ์ด๊ธฐํ ํ์ง ์๋๋ค.
- ๋ฐ๋ผ์ ๋ถํ์ํ ์ฑ๋ฅ์ ํ, ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ ์ค ์ผ ์ ์๋ค.
- ํด๋์ค, ๊ตฌ์กฐ์ฒด์๋ง ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
- ์์์๋ ์ฌ์ฉํ ์ ์๋ค. → ์์๋ ์ธ์คํด์ค๊ฐ ์์ ํ ์์ฑ๋๊ธฐ ์ ์ ์ด๊ธฐํ ํด์ผํ๋ฏ๋ก....
lazy
์ ์ด์ธ๋ฆฌ์ง ์๋๋ค.
lazy var instance = MyClass()
๋ค๋ง ๋ค์ค ์ค๋ ๋์์ ํ๋์ lazy
ํ๋กํผํฐ์ ๋์์ ์ ๊ทผํ๋ค๋ฉด ๋ฐ๋์ ํ๋ฒ๋ง ์ด๊ธฐํ ๋๋ค๋ ๋ณด์ฅ์ ์๋ค. (์ฌ๋ฌ๋ฒ ์ด๊ธฐํ ๋ ์ ์๋ค.)
์ฐ์ฐ ํ๋กํผํฐ(Computed Property)
- ๊ฐ์ ์ ์ฅํ๋ ํ๋กํผํฐ๊ฐ ์๋๋ค.
- ํน์ ์ํ์ ๋ฐ๋ผ ์ฐ์ฐ์ ์คํํ ๊ฒฐ๊ณผ๊ฐ
- ํด๋์ค, ๊ตฌ์กฐ์ฒด, ์ด๊ฑฐํ์๋ ์ฌ์ฉ ๊ฐ๋ฅ
getter (์ฝ๋๋ค๋ ๊ฐ๋
)
getter: ์ธ์คํด์ค ๋ด๋ถ, ์ธ๋ถ์ ๊ฐ์ ์ฐ์ฐํ์ฌ ์ ์ ํ ๊ฐ์ ๋๋ ค์ฃผ๋ ์ญํ ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ์ฐ์ฐ๋ ๊ฐ์ ์ ์ฅํ ํ๋กํผํฐ๊ฐ ์์ด์ผํ๋ค.(ํ์๋ ์๋์ง๋ง ์ผ๋ฐ์ ์ผ๋ก)
setter (์ฐ๋๋ค๋ ๊ฐ๋
)
setter: ํ๋กํผํฐ ๊ฐ์ ๊ฐ์ ์ ์ผ๋ก ์ค์ ํ๋ ์ญํ ์ด๋ค. (๋ด๋ถ๊ฐ ์๋ํ๋ ๊ฒฝ์ฐ์ ์ ์ฉ), ๋งค๊ฐ๋ณ์ ์ด๋ฆ์ ์๋ตํ๋ฉด newValue
๋ฅผ ํตํด ์ ๊ทผํ ์ ์๋ค.
์ฝ๊ธฐ ์ ์ฉ์ผ๋ก ๊ตฌํํ๊ณ ์ถ๋ค๋ฉด getter๋ง ์์ฑํด์ฃผ๋ฉด ๋๋ค.
import Foundation
struct Money {
static let rate = 1200
var won: Int
var dollar: Float {
get{
return Float(self.won / Money.rate)
// rate๋ ํ์
ํ๋กํผํฐ์ด๋ฏ๋ก self๊ฐ ์๋๋ผ ํ์
์ ์ ๊ทผํ์ฌ ์ฌ์ฉํ๋ค.
}
set(newDollar){
self.won = Int(newDollar) * 1200
//dollar = newDollar ->>>> ํ๋จ ๋ด์ฉ์ ์ฃผ์ํ ์ ์ฐธ๊ณ .
}
}
}
var money = Money(won: 40000)
print("40000won -> ",money.dollar, "$") // 40000won -> 33.0 $
money.dollar = 100
print("100dollar -> ",money.won, "won") // 100dollar -> 120000 won
๊ทธ๋ฌ๋ฉด ์ ํจ์(๋ฉ์๋)๊ฐ ์๋๋ผ ์ฐ์ฐ ํ๋กํผํฐ๋ฅผ ์ธ๊น?
- ์ธ์คํด์ค ์ธ๋ถ์์ ๋ฉ์๋๋ฅผ ํตํด ์ธ์คํด์ค ๋ด๋ถ๋ก ์ ๊ทผํ๋ ค๋ฉด ๋ฉ์๋๋ฅผ ๋๊ฐ ๊ตฌํํด์ผํ๋ค. ๋ฐ๋ผ์ ์ฐ์ฐ ํ๋กํผํฐ๋ฅผ ์ฐ๋ ํธ์ด ๊ฐ๋
์ฑ์ด ์ข๊ณ , ์ง๊ด์ ์ด๋ค.
- ํ๋กํผํฐ๋ฅผ ์ด๊ธฐํ ํ ๋ ๊ฐ์ ๊ฒ์ฆํ๋ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉํ ๋
- ๋ค๋ฅธ ํ๋กํผํฐ์ ์์กดํ๋ ํ๋กํผํฐ๋ฅผ ๊ด๋ฆฌํ ๋.
- ์๋ํ๋ ํ๋กํผํฐ ์ฌ์ฉ.
์ฃผ์ํ ์
get, set์ ์๊ธฐ ์์ ์ ํ๋กํผํฐ๋ฅผ ์ฌ์ฉํ๋ฉด recursiveํ๊ฒ ์์ ์ get์ด๋ set์ ํธ์ถํ๊ฒ๋๋ฏ๋ก ์ด๋ ๊ฒ ์ฌ์ฉํ๋ฉด ์๋๋ค. ์ฆ ์ ์ฝ๋์์ ๋ณด๋ฉด dollar
๋ด๋ถ์ get
์ด๋ set
๋ธ๋ฝ์์ dollar
๋ฅผ ์ฌ์ฉํ๋ฉด ์๋๋ค.
ํ์
ํ๋กํผํฐ(Type Property)
static
ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ธํ๋ค.
- ์ธ์คํด์ค๊ฐ ์๋๋ผ, ํน์ ํ์
์์ ์ฌ์ฉํ๋ค.
- ๋ฐ๋ผ์ ํ์
์์ฒด์ ์ํ๋ ํ๋กํผํฐ์ด๋ฉฐ, ๊ฐ์ด ๊ณ ์ ํ๋ค.
- ๋ชจ๋ ์ธ์คํด์ค๊ฐ ๊ณตํต์ผ๋ก ์ฌ์ฉํ๋ ๊ฐ์ ์ฌ์ฉํ๋ค.
- ์ ์ฅํ๋กํผํฐ, ์ฐ์ฐํ๋กํผํฐ ๋ชจ๋ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
Property Observers (didSet , willSet)
ํ๋กํผํฐ์ ๊ฐ์ด ๋ณ๊ฒฝ๋ ๋ ๋ง๋ค ํธ์ถ๋๋ค. didSet
์ ๊ฐ์ด ๋ณ๊ฒฝ๋๊ธฐ ์ง์ . willSet
์ ๊ฐ์ด ๋ณ๊ฒฝ๋ ์งํ์ ํธ์ถ๋๋ค.
didSet
๊ฐ์ด ๋ณ๊ฒฝ๋๊ธฐ ์ง์ ์ ํธ์ถ๋๋ค.
๋ณ๊ฒฝ๋๊ธฐ ์ ๊ฐ(oldValue)์ด ๋งค๊ฐ๋ณ์๋ก ํ๋ ์๋ค. ๋ฐ๋ก ์ด๋ฆ์ ์ง์ ํ์ง ์์ผ๋ฉด oldValue
๋ก ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
willSet
๊ฐ์ด ๋ณ๊ฒฝ๋ ์งํ์ ํธ์ถ๋๋ค.
๋ณ๊ฒฝ๋ ํ์ ๊ฐ(newValue)์ด ๋งค๊ฐ๋ณ์๋ก ํ๋ ์๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก ๋ฐ๋ก ์ด๋ฆ์ ์ง์ ํ์ง ์์ผ๋ฉด oldValue
๋ก ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
- ํ๋กํผํฐ ์ต์ ๋ฒ๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด, ๊ฐ์ด ๋ฐ๋์ ์ด๊ธฐํ๋์ด์์ด์ผํ๋ค.
- ํ์ฌ์ ๊ฐ์ ๊ฐ์ ํ ๋นํ๋๋ผ๋ ํ๋กํผํฐ ์ต์ ๋ฒ๋ ํธ์ถ๋๋ค.
- ์ฐ์ฐ ํ๋กํผํฐ์๋ ์ฌ์ฉ ๋ถ๊ฐํ๋ค. ํ์ง๋ง ์์๋ฐ์ ์ฐ์ฐ ํ๋กํผํฐ์๋ override๋ฅผ ํตํด ์ฌ์ฉ ๊ฐ๋ฅํ๋ค. ์ฆ, ๋ถ๋ชจ ํด๋์ค์ ์ฐ์ฐํ๋กํผํฐ๊ฐ ์๋ค. ์ฌ๊ธฐ์๋ ํ๋กํผํฐ ์ต์ ๋ฒ๋ฅผ ์ฌ์ฉ ๋ชปํ์ง๋ง, ์์๋ฐ์ ์์ํด๋์ค์์๋ ์ด ํ๋กํผํฐ๋ฅผ override ํ์ฌ ํ๋กํผํฐ ์ต์ ๋ฒ๋ฅผ ์ ์ํ์ฌ ์ฌ์ฉํ ์ ์๋ค.