[iOS] Delegate Pattern

doyeonjeong_ยท2022๋…„ 7์›” 29์ผ
0

Design Pattern

๋ชฉ๋ก ๋ณด๊ธฐ
1/1
post-thumbnail

Hits

๐Ÿ’ก iOS์—์„œ ์ž์ฃผ ๋ณด์ด๋Š” Delegate Pattern ์ด๋ž€ ๋ฌด์—‡์ด๊ณ  ์™œ ํ•„์š”ํ•œ๊ฐ€?

Delegate๋ž€?

๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ๋‹ค๋ฅธ ๊ฐ์ฒด์—๊ฒŒ ์ผ๋ถ€๋ฅผ ์œ„์ž„ํ•˜์—ฌ ์ผ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋””์ž์ธ ํŒจํ„ด์ด๋‹ค.
์ฃผ๋กœ ํ”„๋ ˆ์ž„์›Œํฌ ๊ฐ์ฒด๊ฐ€ ์œ„์ž„์„ ์š”์ฒญํ•˜๋ฉฐ, ์ปค์Šคํ…€ ์ปจํŠธ๋กค๋Ÿฌ ๊ฐ์ฒด๊ฐ€ ์œ„์ž„์„ ๋ฐ›์•„ ํŠน์ • ์ด๋ฒคํŠธ์— ๋Œ€ํ•œ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์“ฐ์ธ๋‹ค.

์œ„์ž„์€ย ์ƒ์†๊ณผ ๊ฐ™์ด ์žฌ์‚ฌ์šฉ์„ ์œ„ํ•ด ๊ฐ•๋ ฅํ•œ ๊ตฌ์„ฑ์„ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.ย ์œ„์ž„์—์„œ๋Š”ย ๋‘ย ๊ฐœ์˜ ๊ฐ์ฒด๊ฐ€ ์š”์ฒญ ์ฒ˜๋ฆฌ์— ๊ด€์—ฌํ•ฉ๋‹ˆ๋‹ค. ์ˆ˜์‹  ๊ฐ์ฒด๋Š” ์ž‘์—…์„ย ๋Œ€๋ฆฌ์ธ์—๊ฒŒ ์œ„์ž„ํ•ฉ๋‹ˆ๋‹ค.ย ์ด๋Š” ๋ถ€๋ชจ ํด๋ž˜์Šค์— ๋Œ€ํ•œ ์š”์ฒญ์„ ์—ฐ๊ธฐํ•˜๋Š” ์„œ๋ธŒํด๋ž˜์Šค์™€ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค.ย ์ˆ˜์‹ ์ž๋Š” ์œ„์ž„๋œ ์ž‘์—…์ด ์ˆ˜์‹ ์ž๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋„๋ก ๋Œ€๋ฆฌ์ž์—๊ฒŒ ์ž์‹ ์„ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

๋Œ€๋ฆฌ์ž๋Š” ์ˆ˜์‹ ์ž๋กœ๋ถ€ํ„ฐ ์ผ๋ถ€ ๊ฐ์ฒด๋ฅผ ์ „๋‹ฌ ๋ฐ›์•„ ๊ทธ ๊ฐ์ฒด๋ฅผ ์ด์šฉํ•œ ํ–‰๋™์„ ์ทจํ•˜๊ณ  ์ˆ˜์‹ ์ž์—๊ฒŒ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

์˜ˆ์‹œ

class Receiver {
	let button = Delegate()
    
    init() { // Receiver ๊ฐ์ฒด ์ƒ์„ฑ์‹œ
    	button.delegate = self // delegate์—๊ฒŒ ์ž๊ธฐ ์ž์‹ ์„ ์ „๋‹ฌ
    }
    
    func helloWorld() {
    	print("Hello World")
    }
}

class Delegate {
	var delegate: Sender?
    
    func didTapButton() {
    	delegate?.helloWorld() // Receiver์˜ helloWorld๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.
    }
}

Receiver๋Š” ๊ฐ์ฒด ์ƒ์„ฑ์‹œ ์ž๊ธฐ ์ž์‹ ์„ Delegate์—๊ฒŒ ์ „๋‹ฌํ•˜๊ณ 
Delegate๋Š” ์ „๋‹ฌ ๋ฐ›์€ ๊ฐ์ฒด ์ค‘ helloWorld()๋ผ๋Š” Receiver์˜ ํ•จ์ˆ˜๋ฅผ
Receiver๋ฅผ ๊ฑฐ์น˜์ง€ ์•Š๊ณ  ์ž๊ธฐ ์ž์‹ ์„ ํ†ตํ•ด ์‹คํ–‰ ์‹œํ‚ฌ ์ˆ˜ ์žˆ๊ฒŒ๋œ๋‹ค.

ํ•˜์ง€๋งŒ ์œ„์˜ ๊ฒฝ์šฐ,
๋‹ค๋ฅธ class ๊ฐ์ฒด๊ฐ€ ๋™์ผํ•œ delegate๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ƒ์†์„ ํ•„์š”๋กœ ํ•˜๊ฒŒ๋œ๋‹ค.
์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ฒญ์‚ฌ์ง„ ์—ญํ• ์„ ํ•˜๋Š” protocol์„ ๋จผ์ € ๊ตฌํ˜„ํ•˜์—ฌ ์‚ฌ์šฉํ•œ๋‹ค.

protocol TapDelegate: class {
	func helloWorld()
}
  1. ์œ„ ํ”„๋กœํ† ์ฝœ์„ ์ถ”๊ฐ€ํ•˜๊ณ 
  2. class Receiver: TapDelegate
  3. var delegate: TapDelegate
    ์ด๋ ‡๊ฒŒ ๋˜๋ฉด Receiver์™€ Delegate ํด๋ž˜์Šค๋Š” TapDelegate ํ”„๋กœํ† ์ฝœ์„ ์ด์šฉํ•ด
    Receiver ์ƒ์„ฑ์‹œ helloWorld( ) ํ•จ์ˆ˜๋ฅผ Delegate์™€ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๊ฒŒ๋œ๋‹ค.

๐Ÿคจ ์œ„์ž„์€ ์ƒ์†๊ณผ ๋ญ๊ฐ€ ๋‹ค๋ฅผ๊นŒ?

stack overflow๋ฅผ ๋” ์‚ดํŽด๋ดค๋‹ค.

  • ๊ธฐ์กด ํด๋ž˜์Šค์˜ API ์ „์ฒด๋ฅผ ๋ณต์‚ฌํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์ƒ์†์ด ํ•„์š”ํ•˜๋‹ค.
  • ํ•˜์ง€๋งŒ ๊ธฐ์กด ํด๋ž˜์Šค์˜ ๊ธฐ๋Šฅ๋งŒ์„ ๋ณต์‚ฌํ•˜๋ ค๋ฉด ์œ„์ž„์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.
  • ์ƒ์†์€ ํ•ญ์ƒ ํฌํ•จ๋˜์ง€๋งŒ ์œ„์ž„์€ ์‚ฌ์šฉํ•  ๋•Œ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค.

What I Learn ๐Ÿ‘๐Ÿป

Property๋ผ๋Š” ์ฒญ์‚ฌ์ง„์„ ํ†ตํ•ด Delegate ํŒจํ„ด์„ ์ด์šฉํ•˜๋ฉด
์—ฌ๋Ÿฌ ๋‹ค๋ฅธ ๊ฐ์ฒด๋“ค์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์žฌ์ •์˜ํ•˜๋ฉฐ ๊ตฌ์ฒด์ ์ธ ๊ธฐ๋Šฅ์„ ๋”ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ !
ํด๋ž˜์Šค ๋‹จ์œ„๋กœ ์ƒ์†๋˜๋Š” ๊ฒƒ ๋ณด๋‹ค ๋ฉ”์„œ๋“œ ๊ฐœ๋…์˜ ์ƒ์†์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋‹ˆ๊นŒ ์‰ฌ์›Œ์กŒ๋‹ค.

Reference

profile
๋ธ”๋กœ๊ทธ ์ด์‚ฌ์ค‘ ๐Ÿšš byukbyak.tistory.com

0๊ฐœ์˜ ๋Œ“๊ธ€