๐Ÿ“ฑ App Development Study/iOS๐ŸŽ

[Udemy iOS & Swift Bootcamp] Delegate Design Pattern

ibelieveinme 2023. 4. 25. 23:18
728x90

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()
728x90