ํ๋กํ ์ฝ์ ์ฝ๋๋ฅผ ์ค๊ณํ๊ณ ์ค๊ณํ๋๋ก ๊ตฌํํ ์ ์๊ฒ ํด์ฃผ๋ ์ญํ ์ ํ๋ค.
- ์ง์ผ์ผํ๋ ๊ท์ฝ
- ex) ์๋์ฐจ๊ฐ ์งํค๋ ํ๋กํ ์ฝ โ ๋ฐํด๊ฐ ์๋ค, ์ฐฝ๋ฌธ์ด ์๋ค.
- ๊ทธ๋ ๊ธฐ์ ์ฐจ๋ฅผ ๋ง๋ค ๋๋ ๋ธ๋ ์ดํฌ์ ์ฐฝ๋ฌธ์ด๊ธฐ ๊ธฐ๋ฅ์ ์ถ๊ฐ
protocol Driveable {
var speed: Int { get set }
func speedDown() -> ()
}
์ฐ๋ฆฌ๊ฐ ๋ง๋ Driveable ํ๋กํ ์ฝ์ ์ฒดํํ๋ class๋ฅผ ๋ง๋ค์ด๋ณด์
class Kia: Driveable {
}
์ ์ฝ๋๋ ์ค๋ฅ๊ฐ ๋ ๊ฒ์ด๋ค.
๊ทธ ์ด์ ๋ Kia๋ผ๋ ํด๋์ค๋ Driveable์ด๋ผ๋ ํ๋กํ ์ฝ์ ์ฑํํ๊ธฐ ๋๋ฌธ์ ํ๋กํ ์ฝ์์ ์ง์ ํด์ค ํ๋กํผํฐ์ ๋ฉ์๋๋ฅผ ๋ฌด์กฐ๊ฑด์ ์ผ๋ก ๊ฐ์ ธ์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค.
class Kia: Driveable {
var speed: Int
init(speed: Int) {
self.speed = speed
}
func speedDown(with downSpeed: Int) {
speed -= downSpeed
}
}
์ด๋ ๊ฒ ํ๋ค๋ฉด ์ค๋ฅ๋ ์ฌ๋ผ์ง๊ฒ ๋๋ค.
์ด์ฒ๋ผ ํ๋กํ ์ฝ์ ๋ง๋ค์ด์ ํด๋น ํ๋กํ ์ฝ์ ์ฑํํ๋ ๊ฒ๋ค์ด ๋ฌด์จ ์ญํ ์ ํ๋์ง, ์ด๋ค ๊ฒ๋ค์ ๊ฐ๊ณ ์๋์ง๋ฅผ ๋ฏธ๋ฆฌ ๊ณํํ๊ณ ์ง์ ํ ์ ์๋ ๊ฒ์ด๋ค.
๋ํ ํด๋น ํ๋กํ ์ฝ์ ์ฑํํ๋ ๋ฐฐ์ด๋ก ์์ฑํ ์ ์๋ค.
var cars: [Driveable] = [Kia(speed: 3), Hyundai(speed: 3)]
์ด๋ ๊ฒ ๋๋ค๋ฉด ํด๋น ๋ฐฐ์ด์ ์์๋ค์ด ์ด๋ค ์ญํ ์ ํ๋์ง ์ด๋ฏธ ์๊ณ ์์ด ์ฌ๋ฌ๊ฐ์ง๋ก ์ฌ์ฉํ ์ ์๋ค.
for car in cars {
car.speedDown(with: 3)
}