1. Computed Properties
: ๊ฐ์ด ๊ณ์ ๊ฐฑ์ ๋๋ ์์ฑ
Pizza Inch ์ ๋ฐ๋ผ Slice ์ ๊ฐ์๋ฅผ ์์๋ณด์.
Pizza Inch ๊ฐ ์ฃผ์ด์ก์ ๋ Inch - 4 ๋ฅผ ํ๋ฉด Slice ๊ฐ์๋ฅผ ์ ์ ์๋ค.
import Foundation
let pizzaInInches: Int = 10
var nunberOfSlices: Int = 6
print(pizzaInInches)
์ด๋ฅผ ์ง์ ๋ณ์์์ ๊ฐ์ ์ง์ ํด์ ๋ฃ๋ ๋ฐฉ๋ฒ์ ์์ ๊ฐ๋ค.
์ด์ธ์ Slice ๊ฐ์๋ฅผ ๊ตฌํ๋ ํจ์๋ฅผ ๋ง๋ค์ด์ ๋ฐํํ ์๋ ์๋ค.
import Foundation
let pizzaInInches: Int = 10
var nunberOfSlices: Int {
return pizzaInInches - 4
}
print(pizzaInInches)
์์ ๊ฐ์ด Computed Properties ๋ฅผ ์ฌ์ฉํ๋ฉด ์ถ๊ฐ ๋ฉ์๋๋ฅผ ๋ง๋ค์ง ์๊ณ Computed ๋ณ์ ์ ์ธ๋ง์ผ๋ก ๊ฐ์ ์๋์ผ๋ก ๋ณํ๊ฒ ํ ์ ์๋ค. ๊ฐ์ ๋ฐํํ๊ธฐ์ getter ๋ณ์์ด๋ค.
import Foundation
let pizzaInInches: Int = 10
var nunberOfSlices: Int {
get{
return pizzaInInches - 4
}
}
print(pizzaInInches)
์ด๋ ๊ฒ get ์ผ๋ก ๊ฐ์ธ๋๊ฑฐ๋ ๋๊ฐ๋ค. ๋ง์ด ๋ดค๋ ๊ตฌ์กฐ!
* Couputed Properties ๊ตฌํ์ ์ฃผ์์ฌํญ
1) var ๋ก ์ ์ธํ ๊ฒ.
2) ๋ฐ์ดํฐ ํ์ ์ ๋ช ์์ ์ผ๋ก ์ง์ ํด์ค์ผ ํ๋ค. ํ์ ์ถ๋ก ๋ถ๊ฐ.
Computed Properties ์ getter ๋ฅผ ์์๋ดค์ผ๋ setter ๋ฅผ ์์๋ณด์.
import Foundation
let pizzaInInches: Int = 10
var numberOfPeople: Int = 12
let slicesPerPerson: Int = 3
var numberOfSlices: Int {
get{
return pizzaInInches - 4
}
}
var numberOfPizza: Int{
get {
let numberOfPeopleFedPerPizza = numberOfSlices / slicesPerPerson
return numberOfPeople / numberOfPeopleFedPerPizza
}
set {
let totalSlices = numberOfSlices * newValue
numberOfPeople = totalSlices / slicesPerPerson
}
}
numberOfPizza = 4
print(pizzaInInches)
newValue ํค์๋๋ฅผ ์ฌ์ฉํด์ ๊ฐ์ set ํ ์ ์๋ค.
์๋ 2๋ฒ์งธ์ค numberOfPizza = 4 ๋ก set ๊ฐ์ ์ฃผ๋ฉด ์์์ ๋ฐ๋ผ totalSlices, numberOfPeople ๊ฐ์ด ์๋์ผ๋ก ๊ฐฑ์ ๋๋ค.
numberOfPeople ๊ฐ์ ์ถ๋ ฅํ์ ๋, ๋งจ ์ฒ์ ์ ์ฅํ 12 ๊ฐ์ด ์๋ 8 ๊ฐ์ด ์ถ๋ ฅ๋๋ค.
P.S) ์๋ ์คํ ์๋๊ฐ ๋๋ ค์ File Inspector ๋ก ์ด๋ํด์ Platform ์ macOS ๋ก ๋ฐ๊พธ๊ณ UIKit ๋์ ์ Foundation ์ import ํด์คฌ๋ค.
import Foundation
2. Observed Properties
: Property ๊ฐ์ ๋ณ๊ฒฝ์ฌํญ์ ๋ชจ๋ํฐ๋ง ํ ์ ์๋ ์์ฑ
1) willSet - ๊ฐ์ด ์ ์ฅ๋๊ธฐ ์ง์ ์ ํธ์ถ.
2) didSet - ์๋ก์ด ๊ฐ์ด ์ ์ฅ๋ ์งํ์ ํธ์ถ.
import Foundation
var pizzaInInches: Int = 10 {
willSet{
}
didSet{
if pizzaInInches >= 18 {
print("Invalid size specified, pizzaInInches set to 18.")
pizzaInInches = 18
}
}
}
pizzaInInches = 20
print(pizzaInInches)
Invalid size specified, pizzaInInches set to 18. 18 |
๋ง์ง๋ง ๋ฐ๋ก ์์ค์์ pizzaInInches ์ ๊ฐ์ ๋ณ๊ฒฝํ๋ฉด didSet ๊ตฌ๋ฌธ์ด ํธ์ถ๋๋ค.
width, height, ํ์ธํธ ์์ด ์ฃผ์ด์ง ๋ ํ์ธํธ๊ฐ ๋ชํต์ด ํ์ํ์ง๋ฅผ ์์๋ณด์.
import Foundation
var width: Float = 1.5
var height: Float = 2.3
var bucketsOfPaint: Int {
get {
let area = width * height
let areaCoveredPerBucket: Float = 1.5
let numberOfBuckets = area / areaCoveredPerBucket
let roundedBuckets = ceilf(numberOfBuckets)
return Int(numberOfBuckets)
}
set {
let areaCanCover = Float(newValue) * 1.5
print("This amount of paint can cover an area of \(areaCanCover)")
}
}
bucketsOfPaint = 4
This amount of paint can cover an area of 6.0 |
print ๊ตฌ๋ฌธ์ผ๋ก bucketsOfPaint ๊ฐ์ ์์์ค๋ผ๊ณ ํ์ ๋, get ๊ตฌ๋ฌธ์ด ์คํ๋๋ค.
์ด ๋, ceilf ํจ์๋ ๋ฌด์กฐ๊ฑด ๋ฐ์ฌ๋ฆผ ํ๋ ํจ์์ด๋ค.