*ํ๋กํ ์ฝ: ์์ฑ์ด๋ ๋ฉ์๋์ ํํ๋ฅผ ๋ฏธ๋ฆฌ ๋ง๋ค์ด๋๋ ๊ฒ. ์์์ ์ข๋ ๊ตฌ์กฐ์ ์ผ๋ก ๋ง๋ค ์ ์๋๋ก.
์ด ๋, ํ๋กํ ์ฝ์ ์ ์๋ง ํ ๋ฟ ์ธ๋ถ ๋ด์ฉ์ ๊ตฌํํ์ง ์๋๋ค. ๊ป๋ฐ๊ธฐ๋ง ์๋ค๊ณ ๋ณด๋ฉด ๋จ.
ํ๋กํ ์ฝ์ ํด๋์ค์ ๊ตฌ์กฐ์ฒด์ ์ ์ฉ๋ ์ ์๋ค.
์์ ์ฝ๋)
protocol CanFly{
func fly()
}
class Bird {
var isFemale = true
func layEgg(){
if isFemale {
print("The bird makes a new bird in a shell.")
}
}
}
class Egle: Bird, CanFly{
func fly() {
print("The elgle flpas its wings and lifts off into the sky.")
}
func soar(){
print("The eagle glides in the air using air currents.")
}
}
class Penguin: Bird{
func swim(){
print("The penguin paddles through the water.")
}
}
struct FlyingMuseum{
func flyingDemo(flyingObject: CanFly){
flyingObject.fly()
}
}
struct Airplan: CanFly {
func fly(){
print("The airplane uses its engine to lift off into the air.")
}
}
let myEgle = Egle()
myEgle.fly()
myEgle.layEgg()
myEgle.soar()
let myPenguin = Penguin()
myPenguin.layEgg()
myPenguin.swim()
let myPlane = Airplan()
myPlane.fly()
let museum = FlyingMuseum()
museum.flyingDemo(flyingObject: myPlane)
Bird ํด๋์ค์ fly() ํจ์๋ฅผ ๋ฃ์ด๋๊ณ Egle๊ณผ Penguine, Airplane์ด Bird ํด๋์ค๋ฅผ ์์๋ฐ์ผ๋ฉด ์ด๋ป๊ฒ ๋ ๊น?
Egle์ Airplane์ ์๋ ๋ ์ ์์ง๋ง, Penguine์ด ๋ ์ ์๋ ์ํฉ์ด ์ฐ์ถ๋ ๊ฒ์ด๋ค. Oh No~~~
์ด๋ ๊ฒ ์์ ๊ตฌ์กฐ๋ฅผ ์ข ๋ ์ฒด๊ณ์ ์ผ๋ก ๋ง๋ค๊ณ ์ถ์ ๋ Protocol์ ์ฌ์ฉํ๋ฉด ๋๋ค.
CanFly ํ๋กํ ์ฝ์ ๋ง๋ค๊ณ CanFly ํ๋กํ ์ฝ์ด Fly() ํจ์๋ฅผ ๋ค๊ณ ์๊ฒ ํ ๋ค, Egle๊ณผ Airplane์ด ํ๋กํ ์ฝ์ ์ฌ์ฉํ๋ฉด Penguine์ด ๋ ์๋ฒ๋ฆฌ๋ ์ํฉ์ ์ฐ์ถ๋์ง ์๊ณ ๋ชจ๋ ๊ฒ์ด ์์์ ์ผ๋ก ๊ตฌํ๋ ๊ฒ์ด๋ค.
* struct์ ์ ์ฉํ๊ธฐ
struct MyStructure: FirstProtocol, AnotherProtocol{
//struct definition goes here
}
* class์ ์ ์ฉํ๊ธฐ
class MyClass: Superclass, FirstProtocol, AnotherProtocol{
//class definition goes here
}
Document ์ฐธ๊ณ
https://docs.swift.org/swift-book/documentation/the-swift-programming-language/protocols/
'๐ฑ App Development Study > iOS๐' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Udemy iOS & Swift Bootcamp] Delegate Design Pattern (0) | 2023.04.25 |
---|---|
[Udemy iOS & Swift Bootcamp] UITextField, UITextFieldDelegate (0) | 2023.04.25 |
[Udemy iOS & Swift Bootcamp] Supporting Dark Mode (0) | 2023.04.10 |
[iOS] SF Symbols ? ๋ค์ด๋ก๋ ๋งํฌ (0) | 2023.04.06 |
[Udemy iOS & Swift Bootcamp] ๋๋ฒ์งธ ํ์ด์ง ๋ง๋ค์ด์ ๊ฐ ๋๊ธฐ๊ธฐ (0) | 2023.04.02 |