์๋ ํ์ธ์, ๊ฐ์์ ๋๋ค. ์์์ ํด๋์ค์ ๋ํ ๊ฐ๋ ์ ๊ณต๋ถํ ๋, class์ struct์ ์ฐจ์ด์ ์ค ํด๋์ค๋ '์์์ด ๊ฐ๋ฅํ๋ค'๋ผ๋ ๊ฐ๋ ์ด ์์๋๋ฐ์! ์ด์ ๋ํ ๊ฐ๋ ์ ์์ธํ ์ดํด๋ณด๋๋ก ํฉ์๋ค. class์ sruct์ ์ฐจ์ด์ ๋ณด๋ฌ๊ฐ๊ธฐ click
์์์ด๋? (๋ถ๋ชจํด๋์ค์ ์์ํด๋์ค, sub class, super class)
๋ถ๋ชจ๊ฐ ์์์๊ฒ ์ฌ์ฐ์ ๋ฌผ๋ ค์ฃผ๋ ํ์๋ฅผ ์๋ฏธํ๋ค. swift์์๋ ์ด ๊ฐ๋ ์ ํ์ฉํ์ฌ class๊ฐ ๋ค๋ฅธ class๋ก๋ถํฐ ๋ฉ์๋, ํ๋กํผํฐ ๋ฑ์ ์์๋ฐ๋๊ฒ์ ์๋ฏธํ๋ค. ํ ํด๋์ค๊ฐ ๋ค๋ฅธ ํด๋์ค๋ฅผ ์์ํ ๋ ์์ ๋ฐ๋ ํด๋์ค๋ฅผ ์์ํด๋์ค (sub-class)๋ผ๊ณ ํ๊ณ , ์์ ํด์ฃผ๋ ํด๋์ค๋ฅผ ๋ถ๋ชจํด๋์ค (super-class) ๋ผ๊ณ ํ๋ค.
swift ํด๋์ค๋ ๋ถ๋ชจ ํด๋์ค๋ก๋ถํฐ ๋ฌผ๋ ค๋ฐ์ ๋ฉ์๋, ํ๋กํผํฐ, ์๋ฒ์คํฌ๋ฆฝํธ๋ฅผ ํธ์ถํ๊ฑฐ๋ ์ ๊ทผํ ์ ์๋ค. overriding๋ฅผ ํตํด ๋ฌผ๋ ค๋ฐ์ ๋ฉ์๋, ํ๋กํผํฐ, ์๋ธ์คํฌ๋ฆฝํธ๋ฅผ ์์ ๋ง์ ๊ฒ์ผ๋ก ์ฌ์ ์ํ ์ ์๋ค. ์์๋ฐ์ ํ๋กํผํฐ์ ๊ฐ์ด ๋ณ๊ฒฝ๋์์ ๋ ํ๋กํผํฐ ๊ฐ์์๋ ๊ตฌํํ ์ ์๋ค. ์ฐ์ฐ ํ๋กํผํฐ์ ์ ์ฅํ๋กํผํฐ๋ ์์ ํด๋์ค์์ ํ๋กํผํฐ ๊ฐ์์๋ฅผ ๊ตฌํํ๋ค.
โถ base class (๋ฒ ์ด์ค ํด๋์ค)
๋ค๋ฅธ ํด๋์ค๋ก๋ถํฐ ์์๋ฐ์ง ์๋ ์๋์ ๊ฐ์ Vehicle class ๋ ๋ฒ ์ด์ค ํด๋์ค ๋ผ๊ณ ํ๋ค.
class Vehicle {
var currentSpeed = 0.0
var description: String {
return "traveling at \(currentSpeed) miles per hour"
}
func makeNoise() {
}
}
โถ ์๋ธ ํด๋์ค (sub class)
์์ ๋ฐ๋ ํด๋์ค์ ํํ๋ ์๋์ ๊ฐ๋ค.
class ํด๋์ค์ด๋ฆ: ๋ถ๋ชจํด๋์ค ์ด๋ฆ {
// ํ์ ํด๋์ค ์ ์
}
์์ ์๋ Vehicle ์ ๋ถ๋ชจ ํด๋์ค๋ก ๊ฐ๋ ์๋ธ ํด๋์ค๋ฅผ ๋ง๋ค์ด๋ณด์.
class Bicycle: Vehicle {
var hasBasket = false
}
์ด๋ ๊ฒ ํ๊ฒ ๋๋ฉด, ์ค์ ๋ก Bicycle์ด๋ผ๋ ํด๋์ค ๋ด๋ถ์๋ ํ๋์ ๋ณ์๋ง ์กด์ฌํ๋ ๊ฒ ๊ฐ์ง๋ง, Vehicle ์์ ์ ์ํ ํ๋กํผํฐ์ ๋ฉ์๋๋ฅผ ๋ชจ๋ ์์ ๋ฐ๊ฒ ๋๋ค. ์ฆ ๋ถ๋ชจํด๋์ค ๋ด๋ถ์ ์๋ ๋ชจ๋ ํ๋กํผํฐ, ๋ฉ์๋๋ฅผ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค๋ ์๊ธฐ๋ค. ๋ค์ ์ฝ๋๋ฅผ ํตํด ์ํผํด๋์ค์ ์๋ ํ๋กํผํฐ๋ฅผ ์ฌ์ฉํด๋ณด์.
var bicycle = Bicycle()
bicycle.currentSpeed
// prints "0"
// Vehicle์์ ์ ์ํ ์ด๊ธฐ currentspeed๊ฐ ์ถ๋ ฅ๋๋ค
bicycle.currentSpeed = 12.0
bicycle.currentSpeed
// prints "12.0"
Overriding ์ด๋? (์ค๋ฒ๋ผ์ด๋ฉ)
sub class๋ super class์์ ์ ์๋ ๋ชจ๋ ๊ฒ๋ค์ ๊ทธ๋ฅ ์ฌ์ฉํ์ง ์๊ณ , ์์ ๋ง์ ๊ฐ๋ ์ผ๋ก ์ฌ์ ์ํด์ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค. ์ด๊ฒ์ ์ค๋ฒ๋ผ์ด๋ฉ์ด๋ผ๊ณ ํ๋ค. ์ค๋ฒ๋ผ์ด๋ฉ์ ํ๊ธฐ ์ํด์ ์ค๋ฒ๋ผ์ด๋๋ผ๋ ํค์๋๋ฅผ ์ฌ์ฉํด์ค์ผํ๋ค. ๋ง์ฝ ๊ฐ์ ์ด๋ฆ์ ์ ์๊ฐ super class์ ์๋๋ฐ ์ค๋ฒ๋ผ์ด๋๋ฅผ ์ฌ์ฉํ๋ฉด, ์ปดํ์ผ๋ฌ ์ค๋ฅ๋ฅผ ๋ฐ์์ํจ๋ค. ๋ฐ๋๋ก, ์ฌ์ ์๋ฅผ ์ํด์ ์ค๋ฒ๋ผ์ด๋๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค๋ฉด ์ด๋ํ ์ปดํ์ผ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
โท ์์์ ๋ง๋ Vehicle class์ func ๋ฉ์๋ makeNoise ํจ์๋ฅผ ์ค๋ฒ๋ผ์ด๋ ํด๋ณด๊ฒ ๋ค.
/* ๊ธฐ์กด ํจ์
class Vehicle {
var currentSpeed = 0.0
var description: String {
return "traveling at \(currentSpeed) miles per hour"
}
func makeNoise() {
}
}
*/
์ ๊ธฐ์กด Vehicle ์ super class๋ก ํ๋ sub class๋ฅผ ๋ง๋ค์ด๋ณด๊ฒ ๋ค.
class Train: Vehicle {
override func makeNoise() {
print("choo choo")
}
}
let train = Train()
train.makeNoise()
//prints "choo choo"
์์๋ฐ์ makeNoise ํจ์๋ฅผ ์ค๋ฒ๋ผ์ด๋ ํ์ฌ ์ฌ์ ์ํ ๊ฐ๋ ์ ์ถ๋ ฅํ๋ ๊ฒ์ ๋ณผ ์ ์๋ค. ๋ง์ฝ ์ด๋ ๊ฒ ์๋ธํด๋์ค์์ ์ํผํด๋์ค์ ํน์ฑ์ ์ฌ์ ์ ํ์ ๋, ์ฌ์ ์ ์ด์ ์ํผํด๋์ค์ ์๋ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ณ ์ถ๋ค๋ฉด ์ด๋ป๊ฒ ํด์ผํ ๊น?
์ด๋ด๋๋ super๋ผ๋ ํค์๋๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
class Vehicle {
var type: String
var currentSpeed = 0.0
init(type: String){
self.type = type
}
func makeNoise() {
print("\(type) ์๋ฆฌ ๋ค์๋?")
}
}
class Train: Vehicle {
override func makeNoise() {
super.makeNoise()
print("choo choo")
}
}
var train = Train(type:"๊ธฐ์ฐจ")
train.makeNoise()
/* prints
"๊ธฐ์ฐจ ์๋ฆฌ ๋ค์๋?
choo choo" */
์ ์ฝ๋์์ ์๋ ์์ ๋ฐ๋ ํด๋์ค Train์ ๋ณด๋ฉด, override ํจ์ ์์ super.makeNoise๋ฅผ ๋จผ์ ์ถ๋ ฅํด์ฃผ์๋ค.
โท ์ด๋ฒ์๋ ํ๋กํผํฐ๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉ ํด๋ณด์.
๋ฉ์๋์ ๋ง์ฐฌ๊ฐ์ง๋ก ์ํผํด๋์ค๋ก๋ถํฐ ์์๋ฐ์ ์ธ์คํด์คํ๋กํผํฐ๋ ์ฌ์ ์ ๊ฐ๋ฅํ๋ค. ํ๋กํผํฐ๋ฅผ ์ฌ์ ์ํ๋ค๋ ๊ฒ์ ํ๋กํผํฐ ์์ฒด๋ฅผ ์๋๊ณ , getter, setter, observer๋ฅผ ์ฌ์ ์ํ๋ค๋ ์๋ฏธ์ด๋ค. ์์ ๋ฅผ ์ดํด๋ณด์.
/* ๊ธฐ์กด ํจ์
class Vehicle {
var currentSpeed = 0.0
var description: String {
return "traveling at \(currentSpeed) miles per hour"
}
func makeNoise() {
}
}
*/
class Car: Vehicle {
var gear = 1
override var descripton: String {
return super.decription + " in gear \(gear)"
}
}
let car = Car()
car.currentSpeed = 30.0
car.gear = 2
print(car.description)
//prints "traveling at 30.0 miles per hour in gear 2"
์๋ธ ํด๋์ค์์ ์ฌ์ ์ํ๊ธฐ ์ํ ํ๋กํผํฐ๋, ์ํผํด๋์ค ํ๋กํผํฐ์ ์ด๋ฆ๊ณผ ํ์ ์ด ์ผ์นํด์ผํ๋ค.
+) final ์ด๋?
๊ธฐ๋ณธํด๋์ค์ ๋ณ์๋ฅผ ์ง์ ํ ๋ final ํค์๋๋ฅผ ์ฌ์ฉํ๋ฉด ์ฌ์ ์ํ ์ ์๋ ํ๋กํผํฐ๋ก ์์ฑ๋๋ค.
class Vehicle {
final var currentSpeed = 0.0
var description: String {
return "traveling at \(currentSpeed) miles per hour"
}
func makeNoise() {
}
}
์ด๋ ๊ฒ override ํ ์ ์๋ค๋ ์ปดํ์ผ ์๋ฌ๊ฐ ๋จ๊ฒ ๋๋ค.
'Swift > Swift BASIC' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift] ํ์ ์บ์คํ (Type casting) (0) | 2022.01.19 |
---|---|
[Swift] ํ๋กํผํฐ ์ต์ ๋ฒ (property observer) (0) | 2022.01.19 |
[Swift] ๊ธฐ์ด ๋ฌธ๋ฒ - ํ๋กํผํฐ(property) (0) | 2022.01.17 |
[Swift] ๊ธฐ์ด ๋ฌธ๋ฒ - ์ด๊ธฐํ ๊ตฌ๋ฌธ init / ์๋ฉธ์ deinit ์ด๋? (0) | 2022.01.17 |
[Swift] ๊ธฐ์ด ๋ฌธ๋ฒ - Struct์ Class (feat.์ฐจ์ด์ ) (0) | 2022.01.16 |