Delegate Design Pattern?
delegate. ํ๊ธ๋ก๋ ์์์๋ผ๋ ๋ป์ด๋ค.
์ฆ, delegate(์์์)๋ฅผ ๊ฐ๊ณ ์๋ ๊ฐ์ฒด๊ฐ ๋ค๋ฅธ ๊ฐ์ฒด์๊ฒ ์์ ์ ์ผ์ ์์ํ๋ ํํ์ ๋์์ธ ํจํด์ด๋ค.
Delegate Design Pattern์ ๊ธฐ์?
์์ ๋ฐฐ์ด UITextField ๊ฐ ์์ ์ ์์ํ ๋๋ฅผ ํด๋์ค์์ ์๋ ค๋ฉด ์ด๋ป๊ฒ ๊ตฌํํด์ผํ ๊น?
์ ๊ทธ๋ฆผ์ฒ๋ผ UITextField ํด๋์ค๊ฐ ํด๋์ค์๊ฒ ์ง์ ๋ณด๊ณ ํด์ผํ ๊ฒ์ด๋ค.
์ด๋ ๊ฒ ๊ตฌํํ๋ค ๊ฐ์ ํ์ ๋์ ๋ฌธ์ ์ ์ด ๋ง๋ค.
๊ฐ์ฅ ํฐ ๋ฌธ์ ๋ UITextField๋ฅผ ๋ง๋ค ์์ ์ WeatherViewController์ ์กด์ฌ๋ฅผ ๋ชจ๋ฅธ๋ค. ์ ํด๋์ค๋ฅผ ๋ง๋ค ๋๋ง๋ค ์ UITextField ํด๋์ค์์ ๊ณ์ ์ถ๊ฐํด์ค์ผ ํ๋ค.
์ฆ, ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ๋๋ก ์ด๋ค ํด๋์ค๋ UITextField๊ฐ ์์ ๋ ๋๋ฅผ ์ ์ ์๋๋ก ๊ตฌํํด์ผ ํ๋ค.
๊ทธ๋์ ๋์จ๊ฒ Protocol๊ณผ Delegate Pattern. Apple์ด ๋งค์ฐ ์ข์ํ๋ ๋์์ธ ํจํด์ด๋ค.
์ ๊ทธ๋ฆผ์ฒ๋ผ ๋ณ๊ฒฝํด๋ณด์.
์์ํ ์ ๋ฌด๋ฅผ UITextFieldDelegate ํ๋กํ ์ฝ๋ก ๋ง๋ค๊ณ UITextField์ delegate ๋ณ์๋ก ๊ฐ๊ณ ์๋๋ค. ์ด UITextFieldDelegate๋ฅผ ๋๊ตฌ๋ ์์ํด์ ์ฌ์ฉํ ์ ์๋ค๋ ๋ป์ด๋ค.(Protocol ์ ํน์ ๋ฉ์๋๋ ์์ฑ์ ํํ๋ฅผ ๋ฏธ๋ฆฌ ๋ง๋ค์ด๋๋ ์ฒญ์ฌ์ง ๊ฐ์๊ฑด๋ฐ(์ธ๋ถ๋ด์ฉ์ ์๋) ํด๋์ค๋ ๊ตฌ์กฐ์ฒด, ์ด๊ฑฐํ์ด ๊ฐ์ ธ์์ ์ด๋ฅผ ๋ง์ ๊ตฌํํ ์ ์๋ค.)
UITextField๋ฅผ ์ฌ์ฉํ๋ ํด๋์ค์์ UITextField๋ฅผ ์ ์ธํ๊ณ delegate ์ ์์ ์ ๋ฃ์ด๋๋ฉด textFieldDidBeginEditing ๋์์ ๋ด๊ฐ ์ฌ์ฉํ ์ ์๋ค.
But, Apple์ Open Soucre๊ฐ ์๋๊ธฐ ๋๋ฌธ์ ์ค์ UITextField ๊ฐ ์ด๋ป๊ฒ ์๊ฒผ๋์ง๋ ์ ์ ์๋ค ใ .
* Protocol & Delegate Practice Code
protocol AdvancedLifeSupport {
func performCPR()
}
class EmergencyCallHandler {
var delegate: AdvancedLifeSupport?
func assessSituation(){
print("Can you tell me what happend?")
}
func medicalEmergency(){
delegate?.performCPR()
}
}
struct Paramedic: AdvancedLifeSupport(){
init(handler: EmergencyCallHandler){
handler.delegate = self
}
func performCPR(){
print("The paramedic does chest compressions, 30 per second.")
}
}
class Doctor: AdvancedLifeSupport{
init(handler: EmergencyCallHandler){
handler.delegate = self
}
func performCPR(){
print("The doctor does chest compressions, 30 per second.")
}
func useStethescope(){
print("Listening for heart sounds")
}
}
class Surgeon: Doctor {
override func performCPR(){
super.performCPR()
print("Sings staying alive by the BeeGees")
}
func useElectricDrill(){
print("Whirr..")
}
}
let emilio = EmergencyCallHandler()
let pete = Paramedic(handler: emilio)
let angela = Surgeon(handler: emilio)
emilio.assessSituation()
emilio.medicalEmergency()
'๐ฑ App Development Study > iOS๐' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Udemy iOS & Swift Bootcamp] API ๋ก Json ๋ฐ์ดํฐ ๋ฐ์์ค๊ธฐ. Json Parsing (0) | 2023.05.06 |
---|---|
[Udemy iOS & Swift Bootcamp] Closure(ํด๋ก์ ) (0) | 2023.04.29 |
[Udemy iOS & Swift Bootcamp] UITextField, UITextFieldDelegate (0) | 2023.04.25 |
[Udemy iOS & Swift Bootcamp] Protocol (0) | 2023.04.10 |
[Udemy iOS & Swift Bootcamp] Supporting Dark Mode (0) | 2023.04.10 |