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

๋ฐ˜์‘ํ˜•

 

๐Ÿ”ฅ ํ—ค๋“œํผ์ŠคํŠธ ๋””์ž์ธํŒจํ„ด ์‹œ์ž‘ํ•˜๊ธฐ

"ํ—ค๋“œํผ์ŠคํŠธ ๋””์ž์ธํŒจํ„ด"์€ Java๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์“ฐ์ธ ์ฑ…์ด์ง€๋งŒ, ์—ฌ๊ธฐ์„œ๋Š” Swift๋กœ ๊ตฌํ˜„ํ•˜๋ฉฐ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•ด ๋ณผ๊ฒŒ์š”!
ํ•ญ์ƒ ๊ทธ๋ ‡์ง€๋งŒ ์ด ๊ธ€์€ ๊ฐœ์ธ์ ์ธ ์ •๋ฆฌ์˜ ๋ชฉ์ ์œผ๋กœ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ฑ…์„ ์ง์ ‘ ์ฝ์–ด๋ณด๊ธฐ๋ฅผ ์ถ”์ฒœ๋“œ๋ ค์š” :]

 

๐Ÿฅ ์˜ค๋ฆฌ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๊ฒŒ์ž„ ๋งŒ๋“ค๊ธฐ

SimUDuck์ด๋ผ๋Š” ์˜ค๋ฆฌ ๊ฒŒ์ž„์„ ๋งŒ๋“ค์–ด๋ณผ๊ฒŒ์š” :]

 

 

๋ฐฉ๋ฒ• 1. ์ผ๋ฐ˜์ ์ธ ์ƒ์† ๊ตฌ์กฐ ์‚ฌ์šฉํ•˜๊ธฐ

์ผ๋ฐ˜์ ์ธ ํ‘œ์ค€ ๊ฐ์ฒด์ง€ํ–ฅ ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ Duck์ด๋ผ๋Š” Super class๋ฅผ ๋งŒ๋“ค๊ณ , ์ƒ์†์„ ํ†ตํ•ด ์—ฌ๋Ÿฌ ์˜ค๋ฆฌ๋ฅผ ๋งŒ๋“ค์–ด์š”.

(private, final ๋“ฑ ์„ธ์„ธํ•œ ์„ค์ • ๋“ฑ์€ ์ƒ๋žตํ• ๊ฒŒ์š”)

๊ฐ ์˜ค๋ฆฌ๋“ค์€ ๋ถ€๋ชจ ํด๋ž˜์Šค(Duck)์˜ ๋ฉ”์„œ๋“œ๋ฅผ override ํ•˜์—ฌ ์‚ฌ์šฉํ•ด์š”.

 

 

๐Ÿšจ ์ถ”๊ฐ€ ์š”๊ตฌ ์‚ฌํ•ญ ๋ฐœ์ƒ

โžก๏ธ ์˜ค๋ฆฌ๋Š” ๋‚  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค

 

์—ฌ๊ธฐ์„œ Duck ํด๋ž˜์Šค์— fly ๋ฉ”์„œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ด์š”.

 

์ด๋ ‡๊ฒŒ ๋˜๋ฉด ๋ชจ๋“  ์˜ค๋ฆฌ์— ํ•˜๋Š˜์„ ๋‚˜๋Š” ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋ผ์š”.

๋ฌธ์ œ๋Š” ์˜ค๋ฆฌ ์ค‘์— ์žฅ๋‚œ๊ฐ ์˜ค๋ฆฌ์ฒ˜๋Ÿผ ํ•˜๋Š˜์„ ๋‚  ์ˆ˜ ์—†๋Š” ์˜ค๋ฆฌ๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฑฐ์˜ˆ์š” ๐Ÿฅฒ

์ด ๋ฌธ์ œ๋ฅผ ๋‹จํŽธ์ ์œผ๋กœ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋‚ ์ง€ ๋ชปํ•˜๋Š” ์˜ค๋ฆฌ์—์„œ fly๋ฅผ override ํ•˜์—ฌ ์•„๋ฌด ๋™์ž‘๋„ ํ•˜์ง€ ์•Š๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์–ด์š”.

 

ํ•˜์ง€๋งŒ ์—ฌ๊ธฐ์„œ ๋‹ค๋ฅธ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ด์š”.

 

๐Ÿšจ ์ถ”๊ฐ€ ์š”๊ตฌ ์‚ฌํ•ญ ๋ฐœ์ƒ

โžก๏ธ ์•ž์œผ๋กœ 6๊ฐœ์›”๋งˆ๋‹ค ์ œํ’ˆ์„ ์—…๋ฐ์ดํŠธํ•˜๊ธฐ๋กœ ๊ฒฐ์ •

 

์ด๋ ‡๊ฒŒ ์ƒ์†์„ ์‚ฌ์šฉํ•˜๋Š” ์ƒํ™ฉ์—์„œ ์ œํ’ˆ ์ŠคํŽ™์ด ์ง€์†์ ์œผ๋กœ ์—…๋ฐ์ดํŠธ๋œ๋‹ค๋ฉด ์œ ์ง€ ๋ณด์ˆ˜์— ํฐ ๋ฆฌ์†Œ์Šค๊ฐ€ ๋“ค์–ด๊ฐ€์š”.

๋ชจ๋“  Duck์˜ ๋ฉ”์„œ๋“œ๋“ค์„ ์ „๋ถ€ ์‚ดํŽด๋ณด๋ฉด์„œ ์ƒํ™ฉ์— ๋”ฐ๋ผ ๋ณ€๊ฒฝํ•ด์•ผ ํ•ด์š”.

 

๋ฐฉ๋ฒ• 2. ํ”„๋กœํ† ์ฝœ(์ธํ„ฐํŽ˜์ด์Šค) ์‚ฌ์šฉํ•˜๊ธฐ

์œ„์˜ ๋ฐฉ๋ฒ• 1์—์„œ ๊ตฌํ˜„ํ•œ fly() ๋ฉ”์„œ๋“œ๋ฅผ Duck ํด๋ž˜์Šค์—์„œ ๋นผ๊ณ  Flyable์ด๋ผ๋Š” Protocol์„ ๋งŒ๋“ค์–ด์„œ ์ฑ„ํƒํ•˜๋Š” ๊ตฌ์กฐ๋กœ ๋งŒ๋“ค์–ด์š”.

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๊ฐ™์€ Duck์ด๋ผ๊ณ  ํ•˜๋”๋ผ๋„ "ํ•˜๋Š˜์„ ๋‚˜๋Š” ๋Šฅ๋ ฅ์„ ๊ฐ€์ง„ ์˜ค๋ฆฌ"๋งŒ ์ด ํ”„๋กœํ† ์ฝœ์„ ์ฑ„ํƒ์‹œ์ผœ์„œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์–ด์š”.

 

๐Ÿง ์ฑ…์—์„œ ๋งํ•˜๋Š” ์ด ๋ฐฉ๋ฒ•์˜ ๋‹จ์ 

(์ž๋ฐ” ๊ธฐ์ค€์œผ๋กœ) ์ด๋ ‡๊ฒŒ ๊ตฌํ˜„ํ•˜๋ฉด ์ฝ”๋“œ ์ค‘๋ณต์ด ๋งŽ์ด ๋ฐœ์ƒํ•ด์š”.
fly์˜ ๊ธฐ๋Šฅ์ด ๋Œ€๋ถ€๋ถ„ ์˜ค๋ฆฌ์—์„œ ๊ฐ™๋‹ค๊ณ  ํ–ˆ์„ ๋•Œ, Flyable์„ ์ฑ„ํƒํ•˜๋Š” ์˜ค๋ฆฌ๋“ค์—์„œ ๊ฐ™์€ ์ฝ”๋“œ๊ฐ€ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ๋ฐ˜๋ณต๋˜์–ด์•ผ ํ•ด์š”.

๋‚ ์•„๊ฐ€๋Š” ๋™์ž‘์„ ์กฐ๊ธˆ ๋ฐ”๊พธ๊ธฐ ์œ„ํ•ด Duck์˜ ์„œ๋ธŒํด๋ž˜์Šค์—์„œ fly ๋ฉ”์„œ๋“œ๋“ค์„ ์ „๋ถ€ ์ˆ˜์ •ํ•ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์–ด์š”.

 

โžก๏ธ Swift์—์„œ๋Š” ์‚ฌ์‹ค Protocol์˜ extension์—์„œ func์„ ์ •์˜ํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด ๋ฌธ์ œ์—์„œ ๋ฒ—์–ด๋‚  ์ˆ˜ ์žˆ์–ด์š”.
Java์™€ ๋‹ค๋ฅด๊ฒŒ POP์˜ ๊ด€์ ์—์„œ ์ฝ”๋“œ๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ฑ…์—์„œ ๋งํ•˜๋Š” ๋‹จ์ ์€ Swift์— ์ ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ์ƒ๊ฐํ•ด์š”.

 

๐ŸŽจ ๋””์ž์ธ ์›์น™: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋‹ฌ๋ผ์ง€๋Š” ๋ถ€๋ถ„์„ ์ฐพ์•„๋‚ด๊ณ , ๋‹ฌ๋ผ์ง€๋Š” ๋ถ€๋ถ„๊ณผ ๋ถ„๋ฆฌํ•œ๋‹ค

๋‹ฌ๋ผ์ง€๋Š” ๋ถ€๋ถ„์„ ์ฐพ์•„์„œ ๋‚˜๋จธ์ง€ ์ฝ”๋“œ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋„๋ก '์บก์Šํ™”'ํ•ด์š”.

๊ทธ๋Ÿฌ๋ฉด ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ณผ์ •์—์„œ ์˜๋„์น˜ ์•Š๊ฒŒ ๋ฐœ์ƒํ•˜๋Š” ์ผ์„ ์ค„์ด๋ฉด์„œ ์‹œ์Šคํ…œ์˜ ์œ ์—ฐ์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์–ด์š”.

์ด ์›์น™์„ ์ ์šฉํ•˜๋Š”๋ฐ ๋งŽ์€ ์‹œ๊ฐ„์„ ์Ÿ์•„์•ผ ํ•ด์š”.

 

๋ฐ”๋€Œ๋Š” ๋ถ€๋ถ„์€ ๋”ฐ๋กœ ๋ฝ‘์•„์„œ ์บก์Šํ™”ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๋‚˜์ค‘์— ๋ฐ”๋€Œ์ง€ ์•Š๋Š” ๋ถ€๋ถ„์—๋Š” ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š๊ณ  ๊ทธ ๋ถ€๋ถ„๋งŒ ๊ณ ์น˜๊ฑฐ๋‚˜ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋‹ค

์ด ๊ฐœ๋…์€ ๋‹ค๋ฅธ ๋ชจ๋“  ๋””์ž์ธ ํŒจํ„ด์˜ ๊ธฐ๋ฐ˜์„ ์ด๋ฃจ๋Š” ์›์น™์ด์—์š”.

์ด๊ฒƒ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์œ„์˜ ์˜ค๋ฆฌ ๋ฌธ์ œ๋ฅผ ๋‹ค์‹œ ์‚ดํŽด๋ณผ๊ฒŒ์š”.

 

Duck ํด๋ž˜์Šค๋ฅผ '๋ณ€ํ™”ํ•˜๋Š” ๋ถ€๋ถ„๊ณผ ๊ทธ๋Œ€๋กœ ์žˆ๋Š” ๋ถ€๋ถ„'์œผ๋กœ ๋ถ„๋ฆฌํ•˜๋ ค๋ฉด, 2๊ฐœ์˜ ํด๋ž˜์Šค ์ง‘ํ•ฉ์„ ๋งŒ๋“ค์–ด์•ผ ํ•ด์š”.

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

 

fly()์™€ quack()์€ ์˜ค๋ฆฌ ์ข…๋ฅ˜์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ ธ์š”.

๊ทธ๋ž˜์„œ Duck ํด๋ž˜์Šค๋กœ๋ถ€ํ„ฐ ์ด ๋‘ ๋ฉ”์„œ๋“œ๋ฅผ ๋ถ„๋ฆฌํ•˜๋ ค๋ฉด 2๊ฐœ์˜ ๋ฉ”์„œ๋“œ ๋ชจ๋‘ Duck ํด๋ž˜์Šค์—์„œ ๋„์ง‘์–ด๋‚ด์„œ ๊ฐ ํ–‰๋™์„ ๋‚˜ํƒ€๋‚ผ ํด๋ž˜์Šค ์ง‘ํ•ฉ์„ ์ƒˆ๋กœ ๋งŒ๋“ค์–ด์•ผ ํ•ด์š”.

 

๊ทธ๋Ÿฌ๋ฉด ์ด ํ–‰๋™๋“ค์„ ๊ตฌํ˜„ํ•˜๋Š” ํด๋ž˜์Šค ์ง‘ํ•ฉ์€ ์–ด๋–ป๊ฒŒ ๋””์ž์ธํ•ด์•ผ ํ• ๊นŒ์š”?

์ตœ๋Œ€ํ•œ ์œ ์—ฐํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์ข‹์•„์š”!
์• ์ดˆ์— ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋˜ ์ด์œ ๊ฐ€ ์ด ๋ถ€๋ถ„์—์„œ ๋ณ€๊ฒฝ์ ์ด ์ƒ๊ธธ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์•„์„œ์˜€์œผ๋‹ˆ๊นŒ์š”.

 

๐ŸŽจ ๋””์ž์ธ ์›์น™: ๊ตฌํ˜„๋ณด๋‹ค๋Š” ์ธํ„ฐํŽ˜์ด์Šค ๋งž์ถฐ์„œ ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•œ๋‹ค.

๊ฐ ํ–‰๋™์€ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ํ‘œํ˜„ํ•˜๊ณ , ์ด๋Ÿฐ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ–‰๋™์„ ๊ตฌํ˜„ํ•ด์š”.

์ด์ œ Duck ํด๋ž˜์Šค์—์„œ ๋‚˜๋Š” ํ–‰๋™๊ณผ ๊ฝฅ๊ฝฅ๊ฑฐ๋ฆฌ๋Š” ํ–‰๋™์„ ๊ตฌํ˜„ํ•˜์ง€ ์•Š์•„์š”.

ํ–‰๋™(Behavior) ์ธํ„ฐํŽ˜์ด์Šค๋Š” Duck ํด๋ž˜์Šค๊ฐ€ ์•„๋‹ˆ๋ผ ํ–‰๋™ ํด๋ž˜์Šค์—์„œ ๊ตฌํ˜„ํ•ด์š”.

 

"์ธํ„ฐํŽ˜์ด์Šค์— ๋งž์ถฐ์„œ ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•œ๋‹ค"๋ผ๋Š” ๋ง์€ ์‚ฌ์‹ค "์ƒ์œ„ ํ˜•์‹์— ๋งž์ถฐ์„œ ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•œ๋‹ค"๋ผ๋Š” ๋ง์ž…๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ ๋งํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์ค‘์˜์ ์œผ๋กœ ์‚ฌ์šฉ๋˜์—ˆ๋Š”๋ฐ, ์ž๋ฐ”์—์„œ ๋งํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์˜๋ฏธํ•˜๊ธฐ๋„ ํ•˜๊ณ  ์ธํ„ฐํŽ˜์ด์Šค๋ผ๋Š” ๊ฐœ๋…์„ ์ง€์นญํ•˜๊ธฐ๋„ ํ•ด์š”. ๋ฐ˜๋“œ์‹œ ์ž๋ฐ”์˜ ์ธํ„ฐํŽ˜์ด์Šค(Swift์˜ ํ”„๋กœํ† ์ฝœ)๋ฅผ ์‚ฌ์šฉํ•˜๋ผ๋Š” ๋œป์€ ์•„๋‹ˆ์—์š”.

ํ•ต์‹ฌ์€ ์‹ค์ œ ์‹คํ–‰ ์‹œ์— ์“ฐ์ด๋Š” ๊ฐ์ฒด๊ฐ€ ์ฝ”๋“œ์— ๊ณ ์ •๋˜์ง€ ์•Š๋„๋ก ์ƒ์œ„ ํ˜•์‹์— ๋งž์ถฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•ด์„œ ๋‹คํ˜•์„ฑ์„ ํ™œ์šฉํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด์—์š”.

 

๋˜ํ•œ ์—ฌ๊ธฐ์„œ "์ƒ์œ„ ํ˜•์‹์— ๋งž์ถฐ์„œ ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•˜๋ผ"๋Š” "๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•  ๋•Œ ๋ณดํ†ต ์ถ”์ƒ ํด๋ž˜์Šค๋‚˜ ์ธํ„ฐํŽ˜์ด์Šค ๊ฐ™์€ ์ƒ์œ„ ํ˜•์‹์œผ๋กœ ์„ ์–ธํ•ด์•ผ ํ•œ๋‹ค"๋ผ๋Š” ์˜๋ฏธ์˜ˆ์š”. ๊ฐ์ฒด๋ฅผ ๋ณ€์ˆ˜์— ๋Œ€์ž…ํ•  ๋•Œ ์ƒ์œ„ ํ˜•์‹์„ ๊ตฌ์ฒด์ ์œผ๋กœ ๊ตฌํ˜„ํ•œ ํ˜•์‹์ด๋ผ๋ฉด ์–ด๋–ค ๊ฐ์ฒด๋“  ๋„ฃ์„ ์ˆ˜ ์žˆ๋Š” ์œ ์—ฐ์„ฑ์ด ์ƒ๊ธฐ๊ธฐ ๋•Œ๋ฌธ์ด์—์š”. "๊ทธ๋Ÿฌ๋ฉด ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋Š” ํด๋ž˜์Šค์—์„œ ์‹ค์ œ ๊ฐ์ฒด์˜ ํ˜•์‹์„ ๋ชฐ๋ผ๋„ ๋œ๋‹ค"๋Š” ์˜๋ฏธ๋กœ๋„ ํ•ด์„๋  ์ˆ˜ ์žˆ์–ด์š”. 

 

์ด๋ ‡๊ฒŒ ๊ตฌํ˜„ํ•œ ๊ฒฐ๊ณผ๋ฌผ์€ ์•„๋ž˜์™€ ๊ฐ™์•„์š”.

 

์ด๋ ‡๊ฒŒ ๋””์ž์ธํ•˜๋ฉด ๋‹ค๋ฅธ ํ˜•์‹์˜ ๊ฐ์ฒด(์˜ค๋ฆฌ๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ ๊ฐ์ฒด)์—์„œ๋„ ๋‚˜๋Š” ํ–‰๋™๊ณผ ๊ฝฅ๊ฝฅ ๊ฑฐ๋ฆฌ๋Š” ํ–‰๋™์„ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์š”.

์ด ํ–‰๋™ ์ž์ฒด๊ฐ€ ์˜ค๋ฆฌ ์•ˆ์— ์ˆจ๊ฒจ์ ธ์žˆ์ง€ ์•Š์œผ๋‹ˆ๊นŒ์š”!

 

๊ทธ๋ฆฌ๊ณ  Duck ํด๋ž˜์Šค๋ฅผ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š๊ณ ๋„ ์ƒˆ๋กœ์šด ํ–‰๋™์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์–ด์š”.

์ƒ์†์„ ์“ธ ๋•Œ ๋– ์•ˆ๊ฒŒ ๋˜๋Š” ๋ถ€๋‹ด์„ ๋–จ์ณ ๋ฒ„๋ฆฌ๊ณ  ์žฌ์‚ฌ์šฉ์˜ ์žฅ์ ์„ ๊ฐ€์ ธ๊ฐˆ ์ˆ˜ ์žˆ์–ด์š” :]

 

๐Ÿค” Q. ํ–‰๋™๋งŒ ๋‚˜ํƒ€๋‚ด๋Š” ํด๋ž˜์Šค๋Š” ์–ด์ƒ‰ํ•ด์š”. ํด๋ž˜์Šค๋Š” ์›๋ž˜ ์–ด๋–ค ๋Œ€์ƒ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฒƒ ์•„๋‹Œ๊ฐ€์š”? ์ƒํƒœ, ํ–‰๋™์„ ๋ชจ๋‘ ํฌํ•จํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ ์•„๋‹Œ๊ฐ€์š”?

๊ฐ์ฒด์ง€ํ–ฅ ์‹œ์Šคํ…œ์—์„œ๋Š” ์งˆ๋ฌธํ•œ ๋‚ด์šฉ์ด ๋งž์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ "ํ–‰๋™"๋„ ์ƒํƒœ์™€ ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์–ด์š”! (์ตœ๊ณ  ๋†’์ด, ์†๋„ ๋“ฑ)

๊ฐ์ฒด๋ผ๋Š” ๊ฐœ๋…์ด ๋ฐ˜๋“œ์‹œ ์–ด๋–ค ํ•˜๋‚˜์˜ ๋ฌผ์ฒด๋กœ ํ•œ์ •๋  ํ•„์š”๋Š” ์—†์–ด์š”.

 

๊ทธ๋Ÿผ ์œ„์˜ ํ”„๋กœํ† ์ฝœ์„ ๊ฐ€์ง€๊ณ  Duck์„ ๋‹ค์‹œ ๊ตฌํ˜„ํ•ด ๋ณผ๊ฒŒ์š”!

 

๐Ÿฃ ๋™์ ์œผ๋กœ ์˜ค๋ฆฌ์˜ ํ–‰๋™ ์ง€์ •ํ•˜๊ธฐ

์•ž์„œ์„œ ํŠน์ • ๊ตฌํ˜„์— ๋งž์ถฐ์„œ ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•˜๋ฉด ์•ˆ ๋œ๋‹ค๊ณ  ํ–ˆ์–ด์š”.

ํ˜„์žฌ๋Š” ์•ž์— ์žˆ๋Š” ์ƒ์„ฑ์ž๋ฅผ ๋ณด๋ฉด Quack๋ผ๋Š” ๊ตฌ์ƒ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋กœ ์„ ์–ธ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— Duck์ด Quack์˜ ๊ตฌํ˜„์— ๋งž์ถฐ์ ธ ์žˆ์–ด์š”.

์œ„์—์„œ๋Š” ํ”„๋กœํผํ‹ฐ์˜ ์ƒ์„ฑ ์‹œ์ ์— ๋™์ž‘์ด ํ™•์ •๋˜์ง€๋งŒ, ์ด ๋ถ€๋ถ„์„ ์œ ์—ฐํ•˜๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์–ด์š”.

์•„๋ž˜์™€ ๊ฐ™์ด ๋ฉ”์„œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ์ฝ”๋“œ ์ง„ํ–‰ ์ค‘์— ๋™์ž‘์˜ ๋ณ€๊ฒฝ์ด ๊ฐ€๋Šฅํ•ด์š”.

 

๐Ÿค ๋‘ ํด๋ž˜์Šค์˜ ๊ด€๊ณ„

"A์—๋Š” B๊ฐ€ ์žˆ๋‹ค"์˜ ๊ด€๊ณ„๋ฅผ ์ƒ๊ฐํ•ด ๋ณด๋ฉด, ์˜ค๋ฆฌ์—๋Š” FlyBehavior, QuackBehavior๊ฐ€ ์žˆ์–ด์š”.

๊ฐ๊ฐ ๋‚˜๋Š” ํ–‰๋™๊ณผ ๊ฝฅ๊ฝฅ ๊ฑฐ๋ฆฌ๋Š” ํ–‰๋™์„ ์œ„์ž„ํ•ด์š”.

์ด๋Ÿฐ ์‹์œผ๋กœ "๋‘ ํด๋ž˜์Šค๋ฅผ ํ•ฉ์น˜๋Š” ๊ฒƒ์„ ๊ตฌ์„ฑ(composition)์„ ์ด์šฉํ•œ๋‹ค"๋ผ๊ณ  ํ•ด์š”.

 

๐ŸŽจ ๋””์ž์ธ ์›์น™: ์ƒ์†๋ณด๋‹ค๋Š” ๊ตฌ์„ฑ์„ ํ™œ์šฉํ•œ๋‹ค.

Composition์„ ํ™œ์šฉํ•˜๋ฉด ์‹œ์Šคํ…œ์˜ ์œ ์—ฐ์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์–ด์š”.

 

 

๐Ÿ›  iOS์—์„œ ์ „๋žต ํŒจํ„ด ๊ตฌํ˜„ํ•ด๋ณด๊ธฐ

protocol Theme {
    var backgroundColor: UIColor { get }
    var textColor: UIColor { get }
    // ์ถ”๊ฐ€์ ์ธ ํ…Œ๋งˆ ๊ด€๋ จ ํ”„๋กœํผํ‹ฐ ๋ฐ ๋ฉ”์„œ๋“œ ์ •์˜
}

struct LightTheme: Theme {
    var backgroundColor: UIColor = .white
    var textColor: UIColor = .black
    // ์ถ”๊ฐ€์ ์ธ ํ…Œ๋งˆ ๊ด€๋ จ ํ”„๋กœํผํ‹ฐ ๋ฐ ๋ฉ”์„œ๋“œ ๊ตฌํ˜„
}

struct DarkTheme: Theme {
    var backgroundColor: UIColor = .black
    var textColor: UIColor = .white
    // ์ถ”๊ฐ€์ ์ธ ํ…Œ๋งˆ ๊ด€๋ จ ํ”„๋กœํผํ‹ฐ ๋ฐ ๋ฉ”์„œ๋“œ ๊ตฌํ˜„
}

class ViewController: UIViewController {
    var theme: Theme
    
    init(theme: Theme) {
        self.theme = theme
        super.init(nibName: nil, bundle: nil)
    }
    
    // ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ์˜ ํ…Œ๋งˆ ๊ด€๋ จ ๋กœ์ง์„ ๊ตฌํ˜„
    // ์˜ˆ: ๋ฐฐ๊ฒฝ์ƒ‰ ์„ค์ •, ํ…์ŠคํŠธ ์ƒ‰์ƒ ์„ค์ • ๋“ฑ
}

์œ„์˜ ์˜ˆ์‹œ์—์„œ Theme ํ”„๋กœํ† ์ฝœ์€ ํ…Œ๋งˆ ๊ด€๋ จ ์†์„ฑ์„ ์ •์˜ํ•˜๊ณ  ์žˆ์–ด์š”. 
๊ทธ๋ฆฌ๊ณ  LightTheme๊ณผ DarkTheme์€ ๊ฐ๊ฐ ํ…Œ๋งˆ ํ”„๋กœํ† ์ฝœ์„ ๊ตฌํ˜„ํ•œ ์ „๋žต ํด๋ž˜์Šค์—์š”. 

์ด๋ ‡๊ฒŒ ๊ตฌํ˜„๋œ ์ „๋žต ํŒจํ„ด์„ ํ†ตํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ…Œ๋งˆ๋ฅผ ๋™์ ์œผ๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์–ด์š”. 

 

 

๐Ÿ“š ์ •๋ฆฌ

์ „๋žต ํŒจํ„ด(Strategy Pattern)์€ ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ตฐ์„ ์ •์˜ํ•˜๊ณ  ์บก์Šํ™”ํ•ด์„œ ๊ฐ๊ฐ์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ตฐ์„ ์ˆ˜์ •ํ•ด์„œ ์“ธ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด ์ค˜์š”.
์ „๋žต ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜๋ฉด ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋ถ„๋ฆฌํ•ด์„œ ๋…๋ฆฝ์ ์ธ ๋ณ€๊ฒฝ(๊ด€๋ฆฌ)์ด ๊ฐ€๋Šฅํ•ด์š”!

๋ฐ˜์‘ํ˜•
๋Œ“๊ธ€
๋ฐ˜์‘ํ˜•
๊ณต์ง€์‚ฌํ•ญ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€
Total
Today
Yesterday
๋งํฌ
TAG more
ยซ   2025/01   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
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
๊ธ€ ๋ณด๊ด€ํ•จ