[Swift๐ฆฉ] #13 ์์
- ํด๋์ค ๋ ๋ฉ์๋, ํ๋กํผํฐ, ํน์ง ์ ๋ค๋ฅธ ํด๋์ค์์ ์์ํด์ ์ฌ์ฉํ ์ ์๋ค.
- ๊ตฌ์กฐ์ฒด์ ํด๋์ค์ ๊ฐ์ฅ ํฐ ์ฐจ์ด์ .
- ์ ์ฅ ํ๋กํผํฐ์ ๊ณ์ฐ ํ๋กํผํฐ์ ๊ด๊ณ์์ด, ์์๋ฐ์ ํ๋กํผํฐ์ ํ๋กํผํฐ ์ต์ ๋ฒ๋ฅผ ์ค์ ํ ์ ์๋ค.
1. Base Class ์ ์
- ๋ค๋ฅธ ์ด๋ค ํด๋์ค๋ ์์๋ฐ์ง ์์ ํด๋์ค.
์์) currentSpeed ์ makeNoise ๋ฅผ ๊ฐ์ง๊ณ ์๋ Vehicle class
class Vehicle {
var currentSpeed = 0.0
var description: String {
return "traveling at \(currentSpeed) miles per hour"
}
func makeNoise() {
// do nothing - an arbitrary vehicle doesn't necessarily make a noise
}
}
print("Vehicle: \(someVehicle.description)")
// Vehicle: traveling at 0.0 miles per hour
2. Subclassing == ์์
- ๋ถ๋ชจ๋ก๋ถํฐ ์ฑ๊ฒฉ์ ์์๋ฐ๊ณ , ์์ ์ ๊ณ ์ ํน์ฑ์ ์ถ๊ฐํ ์๋ ์๋ค.
// Vehicle ์ ํ๋กํผํฐ, ๋ฉ์๋, ํน์ง์ ์ฌ์ฉํ๋ฉด์,
// Bicycle ๋ง์ ํ๋กํผํฐ์ธ hasBasket ๋ ์ถ๊ฐ.
class Bicycle: Vehicle {
var hasBasket = false
}
bicycle.currentSpeed = 15.0
print("Bicycle: \(bicycle.description)")
// Bicycle: traveling at 15.0 miles per hour
// ํ๋ฒ subclassing ๋ ๊ฒ์ ๋ค์ subclassing ๊ฐ๋ฅ.
class Tandem: Bicycle {
var currentNumberOfPassengers = 0
}
3. Overriding โญ๏ธ
- ์๋ธํด๋์ค์์ ๋ถ๋ชจ ํด๋์ค์์ ์์๋ฐ์ ๊ฒ์ ์ฌ์ ์ํ๋ ๊ฒ.
- ์ธ์คํด์ค/ํ์ ํ๋กํผํฐ, ๋ฉ์๋, ์๋ธ์คํฌ๋ฆฝํธ์ ๋ชจ๋ ๊ฐ๋ฅํ๋ค.
override
ํค์๋๋ฅผ ๋ถ์ฌ์ ๋ถ๋ชจ์ ๊ฒ์ ์ฌ์ ์ ํ๋ ๊ฒ์์ ์๋ฆฐ๋ค.
4. ๋ถ๋ชจ ํด๋์ค์ ๊ฒ์ ์ ๊ทผ.
- ์์์์ ๋ถ๋ชจ์ ๋ฉ์๋, ํ๋กํผํฐ, ์๋ธ์คํฌ๋ฆฝํธ์ ์ ๊ทผํ ์ ์๋ค.
super
ํค์๋๋ฅผ ์ฌ์ฉํ๋ค.super.someMethod
,super.someProperty
,super[someIndex]
overriding method
class Train: Vehicle {
override func makeNoise() {
print("Choo Choo")
}
}
let train = Train()
train.makeNoise()
// Prints "Choo Choo" : ์๋ก ์ ์ํ ๋ด์ฉ์ด ์ถ๋ ฅ๋ฉ๋๋ค.
properties
- ์ ์ฅ ํ๋กํผํฐ, ๊ณ์ฐ ํ๋กํผํฐ ๋ชจ๋ ์ค๋ฒ๋ผ์ด๋๊ฐ ๊ฐ๋ฅํ๋ค.
- ํ์ , ์ด๋ฆ์ ๋ชจ๋ ๋ช ์ํด์ผ ํ๋ค.
- ๋ถ๋ชจ์ read-only property ๋ฅผ read-write property ๋ก ์ฌ์ ์ํ ์ ์๋ค. (getter/setter ๋ชจ๋ ์ ์ํด์)
- ๋ฐ๋๋ก ๋ถ๋ชจ์ read-write property ๋ฅผ read-only ๋ก ์ฌ์ ์ ํ๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํ๋ค.
- setter ๋ฅผ override ํ ๊ฑฐ๋ฉด getter ๋ ๋ฐ๋์ ์ ๊ณตํด์ผ ํจ.
class Car: Vehicle {
var gear = 1
override var description: String {
return super.description + " in gear \(gear)"
}
}
Property Observers
- ๋ถ๋ชจ ํด๋์ค์ ์ ์ธ๋ ํ๋กํผํฐ ์ต์ ๋ฒ๋ฅผ ์ฌ์ ์ ํ๋ ๊ฒ๋ ๊ฐ๋ฅ.
- ํ์ง๋ง, let ์ด๋ read-only ์๋ ํ๋กํผํฐ ์ต์ ๋ฒ๋ฅผ ๋ถ์ผ ์ ์๋ค.
set ํ ์ ์๊ธฐ ๋๋ฌธ - ๊ฐ์ ํ๋กํผํฐ์ observer ์ setter ๋ฅผ ๋์์ ์ถ๊ฐํด์ ์ฌ์ฉํ๋ ๊ฒ๋ ํ ์ ์๋ค.
setter ๋ observer์ ๊ฐ์ ๋์์ ํ๊ธฐ ๋๋ฌธ
class AutomaticCar: Car {
override var currentSpeed: Double {
didSet {
gear = Int(currentSpeed / 10.0) + 1
}
}
}
์ค๋ฒ๋ผ์ด๋ ๋ฐฉ์ง
- ์์ ํด๋์ค์์ ํน์ ๋ฉ์๋, ํ๋กํผํฐ, ์๋ธ์คํฌ๋ฆฝํธ๊ฐ ์ค๋ฒ๋ผ์ด๋ ๋์ง ์๊ฒ ํ๋ ค๋ฉด
final
ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ค๋ฒ๋ผ์ด๋๋ฅผ ๋ฐฉ์งํ๋ค.
-> BaseVC ๊ฐ์ ๊ฒ ๋ง๊ณ , ๋ง์ง๋ง์ผ๋ก ์ ์ธํ๋ VC์๋ final ์ ์จ์ ์ต์ ํ๋ฅผ ํด์ฃผ์.
Author And Source
์ด ๋ฌธ์ ์ ๊ดํ์ฌ([Swift๐ฆฉ] #13 ์์), ์ฐ๋ฆฌ๋ ์ด๊ณณ์์ ๋ ๋ง์ ์๋ฃ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ๋งํฌ๋ฅผ ํด๋ฆญํ์ฌ ๋ณด์๋ค https://velog.io/@ddosang/Swift-13-์์์ ์ ๊ท์: ์์์ ์ ๋ณด๊ฐ ์์์ URL์ ํฌํจ๋์ด ์์ผ๋ฉฐ ์ ์๊ถ์ ์์์ ์์ ์ ๋๋ค.
์ฐ์ํ ๊ฐ๋ฐ์ ์ฝํ ์ธ ๋ฐ๊ฒฌ์ ์ ๋ (Collection and Share based on the CC Protocol.)
์ข์ ์นํ์ด์ง ์ฆ๊ฒจ์ฐพ๊ธฐ
๊ฐ๋ฐ์ ์ฐ์ ์ฌ์ดํธ ์์ง
๊ฐ๋ฐ์๊ฐ ์์์ผ ํ ํ์ ์ฌ์ดํธ 100์ ์ถ์ฒ ์ฐ๋ฆฌ๋ ๋น์ ์ ์ํด 100๊ฐ์ ์์ฃผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์ ํ์ต ์ฌ์ดํธ๋ฅผ ์ ๋ฆฌํ์ต๋๋ค