ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

๋ฐ˜์‘ํ˜•

๐ŸŽฏ Protocol(ํ”„๋กœํ† ์ฝœ) vs Inheritance(์ƒ์†)


๐Ÿ“Ž Protocol ๋ฐ Inheritance ๋˜์งš๊ธฐ

  • Protocol์„ ํ•™์Šตํ•˜๋ฉฐ ์ง€์†์ ์œผ๋กœ ํ•™์Šตํ•œ ๋‚ด์šฉ์€ 'blueprint(์ฒญ์‚ฌ์ง„)์ด๋‹ค', '๊ณตํ†ต ๊ธฐ๋Šฅ์„ ๊ฐ€์ง„๋‹ค' ๋“ฑ ์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํ•™์Šต์„ ํ•˜๋ฉฐ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋™์‹œ์— ๋– ์˜ค๋ฅด๋Š” ์ƒ๊ฐ์€ ์œ„์˜ ํŠน์ง•์ด ํด๋ž˜์Šค์˜ ์ƒ์†(inheritance)์™€ ์œ ์‚ฌํ•˜๋‹ค๋Š” ์ ์ด๋ฉฐ ์ด ๋‘๊ฐ€์ง€ ๊ฐœ๋…์„ ๊ตฌ๋ถ„ํ•  ํ•„์š”์„ฑ์„ ๋Š๊ผˆ์Šต๋‹ˆ๋‹ค. ์šฐ์„  ๊ตฌ๋ถ„์„ ํ•˜๊ธฐ ์ „, ๊ฐ๊ฐ์˜ ํŠน์ง•์„ ์ƒ๊ธฐํ•  ํ•„์š”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.์œ„์˜ ์ •์˜๋Š” ๊ธฐ๋ณธ์ ์ธ ๊ฒƒ์œผ๋กœ ์ •ํ™•ํ•œ ์ฐจ์ด๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์˜ˆ์‹œ ์ƒํ™ฉ์„ ํ†ตํ•ด ๋‘ ๊ฐœ๋…์„ ์กฐ๊ธˆ ๋” ์•Œ์•„๋ณผ ํ•„์š”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ƒ์† : ์ƒ์†๋ฐ›์„ ํด๋ž˜์Šค์˜ ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ๋ฌผ๋ ค๋ฐ›๋Š”๋‹ค.(๋ถ€๋ชจ์˜ ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ์ž์‹ ํด๋ž˜์Šค๊ฐ€ ๋ฌผ๋ ค๋ฐ›๋Š”๋‹ค)
  • ํ”„๋กœํ† ์ฝœ: ํ”„๋กœํ† ์ฝœ์˜ ์„ ์–ธ์„ ํ†ตํ•ด ์ด ํ”„๋กœํ† ์ฝœ์˜ ๊ทœ์•ฝ์„ ์ค€์ˆ˜ํ•˜๊ฒ ๋‹ค. ๊ฐ์ฒด๊ฐ„์˜ ์†Œํ†ต ๊ทœ์•ฝ์ด๋‹ค.

๐Ÿ“‚ ์˜ˆ์‹œ๋ฅผ ํ†ตํ•œ ์ดํ•ด

์œ„์˜ ์˜ˆ์‹œ๋Š” Employee๋ผ๋Š” ํด๋ž˜์Šค๋กœ ๊ณ ์šฉ๋œ ๋ชจ๋“  ์‚ฌ๋žŒ์ด ๊ณตํ†ต์œผ๋กœ ๊ฐ€์ ธ์•ผํ•  ํŠน์ง•์ด ๊ตฌํ˜„๋˜์–ด์žˆ๊ณ , PM, Developer, Tester๋ผ๋Š” ๊ฐœ๊ฐœ๋ณ„์˜ ํ”ผ๊ณ ์šฉ์ธ์ด ํ•ด๋‹น ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›๋Š” ๊ตฌ์กฐ๋กœ ๋˜์–ด์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐœ๋…์ ์œผ๋กœ ๋ณด๋ฉด, Employee๋Š” ๋ชจ๋“  ๊ณ ์šฉ์ธ์ด ๊ฐ€์ ธ์•ผํ•  ๋‚ด์šฉ์ด๋ฉฐ PM, Developer, Tester๋Š” Employee์˜ ํŠน์ง•์„ ๊ทธ๋Œ€๋กœ ๊ฐ–์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์— ๋งŒ์•ฝ ์•„๋ž˜์˜ ์ฝ”๋“œ๊ฐ€ Employee์— ์ถ”๊ฐ€๋œ๋‹ค๋ฉด ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ชจ๋“  ์ง์›๋“ค์ด ์•„๋ž˜์˜ ์ฝ”๋“œ๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค.

๋งŒ์•ฝ ์ด๋ ‡๊ฒŒ ์ž‘์„ฑ๋œ๋‹ค๋ฉด, PM ์—ญ์‹œ ์œ„์˜ ๋ฉ”์†Œ๋“œ๋“ค์„ ๋ชจ๋‘ ๊ฐ–๊ฒŒ ๋˜๋Š”๋ฐ, ๋‘ ๋ฉ”์†Œ๋“œ sendDevelopingReport()์™€ sendTestingReport()๋Š” PM class์™€ ๋ฌด๊ด€ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋‹ค์‹œ ๋งํ•ด, PM์€ DevelopingReport์™€ TestingReport๋ฅผ ๋ณด๋‚ผ ์ผ์ด ์—†์Šต๋‹ˆ๋‹ค. PM class๋Š” getDevelopingReport()์™€ getTestingReport()๋งŒ์„ ๊ฐ€์ ธ์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์œ„์˜ ๊ตฌ์กฐ๋Š” ์ข‹์€ ๋ชจ๋ธ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์•„๋ž˜์˜ ์ƒํ™ฉ์„ ๊ฐ€์ •ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์ด ๋ชจ๋ธ์„ ๋‹ค๋ฅธ ๋ชจ๋ธ์—์„œ ์‚ฌ์šฉํ•˜๊ณ , Developer class์˜ instance๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

์ด ์ƒํ™ฉ์—์„œ, getDevelopingReport๋ฅผ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ• ์ง€, ๊ทธ๋ฆฌ๊ณ  ์–ด๋–ค Developer๊ฐ€ ์ œ์ถœํ•œ report์ธ์ง€(์–ด๋–ค Developer instance๊ฐ€ getDevelopingReport() ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ–ˆ๋Š”์ง€)๊ฐ€ ํ—ท๊ฐˆ๋ฆฌ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฐ ๋ฌธ์ œ์˜ ์ƒํ™ฉ์—์„œ protocol์˜ ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ์ ํ•ฉํ•˜๋ฉฐ, ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์œ„์˜ ์ฝ”๋“œ์—์„œ๋Š” PM์€ sendํ•  ํ•„์š”๊ฐ€ ์—†์œผ๋ฏ€๋กœ getDevelopingReport์™€ getTestingReport๋งŒ ๊ฐ€์ง€๊ฒŒ ๋˜๊ณ , Developer๋Š” sendDevelopingReport๋งŒ, Tester๋Š” sendTestingReport ๋ฉ”์†Œ๋“œ๋งŒ ๊ฐ€์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ฆ‰, ๊ณตํ†ต์ ์ธ ๊ธฐ๋Šฅ์ด๋‚˜ ๊ฐœ๋…์€ ์ƒ์†์„ ํ†ตํ•ด ์ฒ˜๋ฆฌํ•˜๊ณ , ๊ฐœ๋ณ„์ ์ธ ๊ฐœ๋…์€ ํ”„๋กœํ† ์ฝœ์„ ์„ ์–ธํ•จ์œผ๋กœ์จ ๊ฐœ๋ณ„ ๊ตฌํ˜„ํ•˜์—ฌ ํ•„์š”์—†๋Š” ๊ธฐ๋Šฅ์˜ ์ค‘์ฒฉ์„ ๋ง‰์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๋‹จ์ˆœํžˆ ์ƒ์†์„ ๋ฐ›๊ณ  ์ถ”๊ฐ€๋กœ ๊ทธ ํด๋ž˜์Šค์— ๋ฉ”์†Œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•ด์ฃผ๋Š” ๊ฒƒ๊ณผ ํ”„๋กœํ† ์ฝœ์„ ์„ ์–ธํ•˜์—ฌ ์ฑ„ํƒํ•˜๋Š” ๊ฒƒ์˜ ์ฐจ์ด๋Š” ๋ฌด์—‡์ผ๊นŒ์š”?

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

๐Ÿ“ ๋” ์ƒ๊ฐํ•ด๋ณด๊ธฐ

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

reference: Protocol vs Inheritance

๋ฐ˜์‘ํ˜•
๋Œ“๊ธ€
๋ฐ˜์‘ํ˜•
๊ณต์ง€์‚ฌํ•ญ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€
Total
Today
Yesterday
๋งํฌ
TAG more
ยซ   2024/10   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
๊ธ€ ๋ณด๊ด€ํ•จ