๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐ŸŽ iOS/๐Ÿ“– ๊ฐœ๋…

[๋””์ž์ธ ํŒจํ„ด]Delegate Pattern

by MINT09 2024. 1. 27.

 

delegate pattern์€ ์ฃผ๋กœ ํ™”๋ฉด์˜ ์ „ํ™˜์—์„œ ์‚ฌ์šฉ๋œ๋‹ค. 
ํ™”๋ฉด์€ ์–ด๋–ป๊ฒŒ ์ „ํ™˜๋ ๊นŒ?
1๋ฒˆ ํ™”๋ฉด๊ณผ 2๋ฒˆ ํ™”๋ฉด์ด ์žˆ๋‹ค. ๋‹ค์‹œ ๋งํ•ด, 1๋ฒˆ view controller์™€ 2๋ฒˆ view controller๊ฐ€ ์žˆ๋‹ค. 

1๋ฒˆ view controller์—์„œ ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ 2๋ฒˆ view controller๋กœ ํ™”๋ฉด์ด ๋„˜์–ด๊ฐˆ ๋•Œ, 1๋ฒˆ ํ™”๋ฉด์€ ๋‹จ์ˆœํžˆ ์‚ฌ๋ผ์ง€๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค. 2๋ฒˆ ํ™”๋ฉด์ด 1๋ฒˆ ํ™”๋ฉด์˜ ์œ„์— ์Œ“์ด๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค. 

์ด๋•Œ 2๋ฒˆ ํ™”๋ฉด์ด ์ƒ๊ธฐ๋ฉด์„œ 2๋ฒˆ view conroller๋Š” ์ดˆ๊ธฐํ™”๋˜์–ด ์ƒ์„ฑ๋˜๋Š” ๊ฒƒ์œผ๋กœ 1๋ฒˆ view controller๋กœ๋ถ€ํ„ฐ ์ •๋ณด๋“ค์„ ๋ฐ›์•„์˜ค๊ฒŒ ๋œ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๋งŒ์ผ 2๋ฒˆ ํ™”๋ฉด์—์„œ ๋’ค๋กœ๊ฐ€๊ธฐ ๋ฒ„ํŠผ์œผ๋กœ ๋‹ค์‹œ 1๋ฒˆ ํ™”๋ฉด์œผ๋กœ ๋Œ์•„๊ฐ€๊ฒŒ ๋˜๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ? 1๋ฒˆ ํ™”๋ฉด์ด ๋‚˜์˜ค๋ฉด์„œ ์ƒˆ๋กญ๊ฒŒ 1๋ฒˆ view controller๊ฐ€ ๋‹ค์‹œ ์ดˆ๊ธฐํ™” ๋˜๋ฉด์„œ ์ƒ์„ฑ๋ ๊นŒ?

์•„๋‹ˆ๋‹ค. 2๋ฒˆ view controller๊ฐ€ pop๋˜๋ฉด์„œ ์ •๋ณด๋“ค์ด ํ•ด์ง€๋˜์–ด ์‚ฌ๋ผ์ง€๊ณ  ๋ฐ‘์— ๊น”๋ ค ์žˆ๋˜ 1๋ฒˆ ํ™”๋ฉด์ด ๋‹ค์‹œ ๋ณด์ด๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ๋งŒ์ผ 2๋ฒˆ ํ™”๋ฉด์ธ ์ƒํƒœ์—์„œ 1๋ฒˆ ํ™”๋ฉด์˜ ์ •๋ณด๋„ ๋ฐ”๊พธ์–ด ์ฃผ๊ณ  ์‹ถ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ? 1๋ฒˆ ํ™”๋ฉด์€ ์ƒˆ๋กญ๊ฒŒ ์ดˆ๊ธฐํ™”ํ•ด ์ƒ์„ฑ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ๋ฐ. 

>  ๋ฐ”๋กœ ์ด๋Ÿฐ ๊ฒฝ์šฐ์— delegate๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. <

2๋ฒˆ ํ™”๋ฉด์—์„œ `MINT`๋ผ๋Š” ์ •๋ณด๋ฅผ ๋ฐ›์•˜๋‹ค. ์ด๋ฅผ 1๋ฒˆ view controller์— ์žˆ๋Š” ์ด๋ฆ„์— ํ• ๋‹นํ•ด์ฃผ๊ณ  ์‹ถ์œผ๋ฉฐ, ์ด๋ฆ„์— `data: MINT`๋ฅผ ํ• ๋‹นํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ฐ€์ง„ ํ•จ์ˆ˜๋Š” 1๋ฒˆ view controller์— ์žˆ๋‹ค. ์–ด๋–ป๊ฒŒ 1๋ฒˆ์˜ ํ•จ์ˆ˜๋กœ ์ •๋ณด๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์„๊นŒ? ๋ฐ”๋กœ 1๋ฒˆ์„ ๋ถ€๋ฅผ ์ˆ˜๋Š” ์—†๋Š”๋ฐ.

๋•Œ๋ฌธ์— ํ”„๋กœํ† ์ฝœ์„ ํ†ตํ•œ delegate pattern์„ ์ด์šฉํ•ด ๋„˜๊ฒจ์ค€๋‹ค. 1๋ฒˆ view controller๋Š” `์‹ ์ƒ์ •๋ณด protocol`์„ ์ฑ„ํƒํ•œ๋‹ค. ๋•Œ๋ฌธ์— `์‹ ์ƒ์ •๋ณด protocol` ๋‚ด๋ถ€์— ์žˆ๋Š” func ์ด๋ฆ„ ์ž…๋ ฅ์„ ๊ฐ–๊ฒŒ ๋˜๊ณ , ๊ตฌํ˜„ํ•œ๋‹ค. 2๋ฒˆ view controller๋Š” `weak var delegate`๋ฅผ ํ†ตํ•ด์„œ `์‹ ์ƒ์ •๋ณด` ํƒ€์ž…์œผ๋กœ ์ƒ์„ฑ๋œ๋‹ค. ๋•Œ๋ฌธ์— `์‹ ์ƒ์ •๋ณด protocol`์— ์žˆ๋Š” `์ด๋ฆ„์ž…๋ ฅ ํ•จ์ˆ˜`๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ด๋ฅผ ํ†ตํ•ด `mint`๋ผ๋Š” ์ด๋ฆ„ ์ •๋ณด๋ฅผ ๋„˜๊ฒจ์ค€๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์ด๋•Œ `weak var delegate`๋กœ ์„ ์–ธํ•ด ์ƒ์„ฑํ•œ `์‹ ์ƒ์ •๋ณด protocol`์— ์žˆ๋Š” ์ด๋ฆ„์ž…๋ ฅ ํ•จ์ˆ˜๊ฐ€ 1๋ฒˆ view controller์— ์žˆ๋‹ค๋Š” ๊ฑด ์–ด๋–ป๊ฒŒ ์•Œ ์ˆ˜ ์žˆ์„๊นŒ? 


์ด๋Š” delegate ๋ผ๋Š” ๋‹จ์–ด๊ฐ€ ๋‚˜์˜ค๊ฒŒ ๋œ ๊ฒƒ๊ณผ๋„ ์—ฐ๊ด€์ด ์žˆ๋‹ค. ์—ฌ๊ธฐ์„œ 1๋ฒˆ view controller๊ฐ€ ์ด๋ฆ„์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋ฐ›์•„์˜ค๊ณ  ์‹ถ์ง€๋งŒ, ํ•  ์ˆ˜ ์—†์œผ๋‹ˆ 2๋ฒˆ view controller์—๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์™€ ๋‹ฌ๋ผ๊ณ  ์œ„์ž„ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๋•Œ๋ฌธ์— ๋‚ด๊ฐ€ ์ด๊ฒƒ์„ ์œ„์ž„ํ–ˆ๋‹ค๊ณ  ์•Œ๋ ค์ค˜์•ผ ํ•œ๋‹ค.