๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • Dev Blog
CS/๊ทผ๋ณธ

[CS] ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„

by ์œ ์ง„์˜ 2023. 10. 19.
ํ•ด๋‹น ์ฃผ์ œ๋Š” ๊ฐ€ํ†จ๋ฆญ๋Œ€ํ•™๊ต GDSC์—์„œ ์ง„ํ–‰๋˜๋Š” ํ…Œ์ฝ”ํ†ก ์„ธ์…˜์˜ ์ฃผ์ œ๋กœ ํ™œ์šฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

 

ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„

ํŠน์ • ๊ด€์ ๊ณผ ์ ‘๊ทผ ๋ฐฉ์‹์— ๋”ฐ๋ฅธ ๊ฐœ๋ฐœ์ž์˜ ์ฝ”๋”ฉ ๋ฐฉ์‹

 
์–ด๋Š ๋ถ„์•ผ์ด๊ฑด ๊ด€์ ์— ๋”ฐ๋ฅธ ์—ฌ๋Ÿฌ ๋ฐฉ๋ฒ•๋ก ์ด๋‚˜ ์ฒด๊ณ„๋“ค์ด ๋ถ„๋ช…ํžˆ ์กด์žฌํ•œ๋‹ค. ๋‹น์—ฐํžˆ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ถ„์•ผ์—์„œ๋„ "์–ด๋–ป๊ฒŒ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•  ๊ฒƒ์ธ๊ฐ€?" ๋ผ๋Š” ์งˆ๋ฌธ์— ๋Œ€ํ•œ ์—ฌ๋Ÿฌ ์˜๊ฒฌ๋“ค์ด ๋ชจ์—ฌ ์ด๋ก ์  ํ‹€(ํŒจ๋Ÿฌ๋‹ค์ž„)์ด ์ƒ๊ฒจ๋‚˜๊ณ  ๊ฐœ๋ฐœ์ž๋“ค์€ ํŒจ๋Ÿฌ๋‹ค์ž„์„ ๋ฐ”ํƒ•์œผ๋กœ ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค. ์ฆ‰, ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๋Š” ๊ฒƒ์—๋งŒ ๋ชฉ์ ์„ฑ์„ ๋‘์ง€ ๋ง๊ณ  ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰, ๊ทธ ์ด์ƒ์˜ ๊ฒƒ์„ ์œ„ํ•ด ํŒจ๋Ÿฌ๋‹ค์ž„์„ ๋ฐ”ํƒ•์œผ๋กœ ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.
 

ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰, ๊ทธ ์ด์ƒ์˜ ๊ฒƒ?

 

์ถœ์ฒ˜) https://t2informatik.de/en/smartpedia/spaghetti-code

 
์ŠคํŒŒ๊ฒŒํ‹ฐ ์ฝ”๋“œ๋ž€ ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•˜์ง€๋งŒ, ์‚ฌ๋žŒ์ด ์ฝ”๋“œ๋ฅผ ์ฝ์œผ๋ฉด์„œ ๊ทธ ์ฝ”๋“œ์˜ ์ž‘๋™์„ ํŒŒ์•…ํ•˜๊ธฐ๋Š” ์–ด๋ ค์šด ์ฝ”๋“œ๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ์ข‹๊ฒŒ ๋งํ•˜๋ฉด ๊ฐ€๋…์„ฑ์ด ๋‚ฎ์€ ์ฝ”๋“œ ๋” ๋‚˜์•„๊ฐ€ ์žฌ์‚ฌ์šฉ์„ฑ, ํ™•์žฅ์„ฑ์ด ๋‚ฎ์€ ์ฝ”๋“œ๋ฅผ ์˜๋ฏธํ•˜๊ณ , ๋‚˜์˜๊ฒŒ ๋งํ•˜๋ฉด ๊ฐ™์ด ์ผํ•˜๊ธฐ ์‹ซ์€ ์ฝ”๋“œ๋ฅผ ์˜๋ฏธํ•  ๊ฒƒ์ด๋‹ค.
 
ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฒฝํ—˜์ด ์ ์€ ์‚ฌ๋žŒ๋“ค์ด ๊ฐ€์žฅ ๋งŽ์ด ํ•˜๋Š” ์ƒ๊ฐ์ด์ž ์‹ค์ˆ˜๋Š” "์ œ๋Œ€๋กœ ๋Œ์•„๊ฐ€๋Š” ๊ฑฐ ๋ณด๋‹ˆ ํ•ด์น˜์› ๊ตฐ... ํ›„ํ›—..." ์ผ ๊ฒƒ์ด๋‹ค. ์ด๋ ‡๊ฒŒ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์‹คํ–‰ ๊ฒฐ๊ณผ์˜ ์ดˆ์ ์„ ๋งž์ถ˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•œ๋‹ค๋ฉด ๊ทธ ์ด์ƒ์˜ ๊ฒƒ์„ ๋ณด์ง€ ๋ชปํ•˜๊ฒŒ ๋˜๊ณ , ์ŠคํŒŒ๊ฒŒํ‹ฐ ์ฝ”๋“œ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋  ์—ฌ์ง€๊ฐ€ ์ถฉ๋ถ„ํ•˜๋‹ค.
 
ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰, ๊ทธ ์ด์ƒ์˜ ๊ฒƒ์ธ ๊ฐ€๋…์„ฑ, ์žฌ์‚ฌ์šฉ์„ฑ, ํ™•์žฅ์„ฑ์ด ๋†’์€ ์ฝ”๋“œ๋ฅผ ์งœ๊ณ  ์‹ถ๋‹ค๋ฉด ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„์— ๋Œ€ํ•ด ์ฃผ๋ชฉํ•ด ๋ณด์ž. ์ด์ œ๋ถ€ํ„ฐ ๊ฐ€๋…์„ฑ, ์žฌ์‚ฌ์šฉ์„ฑ, ํ™•์žฅ์„ฑ, ์ฆ‰ ์œ ์ง€๋ณด์ˆ˜ ์ธก๋ฉด์—์„œ ๋ฐ”๋ผ๋ณธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„์— ๋Œ€ํ•ด ์„ค๋ช…์„ ํ•  ๊ฒƒ์ด๋‹ˆ ์ฐธ๊ณ ํ•ด ์ฃผ๊ธธ ๋ฐ”๋ž€๋‹ค.
 
 

ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„์˜ ๋“ฑ์žฅ

 

ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„์˜ ์ง„ํ™”(?)

 
๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ๋žŒ๋“ค์€ ์œ„์˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„์ด ์ง„ํ™”ํ•˜๋ฉด์„œ ๋“ฑ์žฅํ–ˆ๋‹ค๊ณ  ์•Œ๊ณ  ์žˆ์„ ๊ฒƒ์ด๋‹ค. ํ•˜์ง€๋งŒ, ๋“ฑ์žฅ ์ˆœ์„œ๋Š” ์ด์™€ ์ •๋ฐ˜๋Œ€๋กœ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ -> ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ -> ์ ˆ์ฐจ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ์•Œ๊ณ  ์žˆ๋Š” ํŒจ๋Ÿฌ๋‹ค์ž„์˜ ์ˆœ์„œ๋Š” ๋“ฑ์žฅ ์ˆœ์„œ๊ฐ€ ์•„๋‹Œ ํ•ด๋‹น ํŒจ๋Ÿฌ๋‹ค์ž„์ด ๊ฐ๊ด‘๋ฐ›์€ ์‹œ์ ์ด๋‹ค. ์™œ ๋“ฑ์žฅ ์ˆœ์„œ์™€ ๊ฐ๊ด‘๋ฐ›์€ ์‹œ์ ์ด ๋‹ค๋ฅด๊ฒŒ ๋˜์—ˆ๋Š”์ง€๋Š” ์•„๋ž˜ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ•˜์ž.
 

[๊ฐœ๋ฐœ ์ƒ์‹] 3๋Œ€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„์˜ ๋“ฑ์žฅ๊ณผ ๋ถ€ํฅ

3๋Œ€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„์˜ ๋“ฑ์žฅ ์ˆœ์„œ์™€ ๋ถ€ํฅ ์ˆœ์„œ๊ฐ€ ๋ฐ˜๋Œ€์ธ ์ด์œ ๋Š”? | โ˜… ์—ญ์‹œ๋‚˜ ์˜ค๋ž˜์ „์—, ์ง€์ธ๊ป˜ ๊ฐ„๋žตํžˆ ์„ค๋ช…๋“œ๋ฆฌ๊ธฐ ์œ„ํ•ด ์ •๋ฆฌํ•ด๋‘” ๊ธ€์ž…๋‹ˆ๋‹ค. ๊นŠ๊ฒŒ ์กฐ์‚ฌํ•ด์„œ ์ •๋ฆฌํ•œ ๊ฑด ์•„๋‹ˆ๋‹ˆ ๊ฐ์•ˆํ•ด์„œ ๊ฐ€

brunch.co.kr

 
ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„์€ ๋‹จ์ˆœํžˆ ์ง„ํ™”๋ก ์  ๊ด€์ ์—์„œ ์šฐ์—ด์„ ํŒ๋‹จํ•˜๋Š” ์š”์†Œ๊ฐ€ ์•„๋‹ˆ๋‹ค. ์ ‘๊ทผ ๋ฐฉ์‹๊ณผ ์‚ฌ์šฉ ํ™˜๊ฒฝ์— ๋”ฐ๋ผ ์œ ๋™์ ์œผ๋กœ ํ™œ์šฉ๋˜๋Š” ๊ฒƒ์ผ ๋ฟ ์–ด๋Š ํŒจ๋Ÿฌ๋‹ค์ž„์ด ์ข‹๊ณ  ๋‚˜์˜๊ณ ๋ฅผ ๋”ฐ์งˆ ์ˆ˜ ์—†๋‹ค๋Š” ์  ์•Œ์•„๋‘๊ณ  ์ด ๊ธ€์„ ๋ด์คฌ์œผ๋ฉด ํ•œ๋‹ค.

 

๋ช…๋ นํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ / ์„ ์–ธํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ

 

์ถœ์ฒ˜) https://medium.com/@vincentbacalso/imperative-vs-declarative-programming-f886d3b65595

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


์ ˆ์ฐจ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ? ์ ˆ์ฐจ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ!

์ ˆ์ฐจ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ๋ช…๋ นํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ๋Œ€ํ‘œ์ ์ธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„์ด๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ๋žŒ๋“ค์ด ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ๊ณผ ์—ฎ์–ด ์ƒ๊ฐํ•˜์—ฌ ์ ˆ์ฐจ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋ผ๊ณ  ์•Œ๊ณ  ์žˆ์„ ํ…๋ฐ, ์ด๋Š” ํ•œ๊ตญ์–ด๋กœ ๋ฒˆ์—ญํ•  ๋•Œ ์ƒ๊ธด ์ž˜๋ชป๋œ ์šฉ์–ด์ด๋‹ค.
 
์ ˆ์ฐจ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„์€ ํ”„๋กœ์‹œ์ €(Procedure)๋ฅผ ํ˜ธ์ถœํ•จ์œผ๋กœ์จ, ์ถ”์ƒํ™”์™€ ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋ชฉํ‘œ๋กœ ํ•˜๋Š” ํŒจ๋Ÿฌ๋‹ค์ž„์„ ์˜๋ฏธํ•œ๋‹ค. ์ด๋•Œ, Procedure๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•œ๋‹ค๊ณ  ํ•˜์—ฌ Procedural Programming์ด๋ผ๋Š” ์ด๋ฆ„์ด ๋ถ™์—ฌ์กŒ๊ณ  ์ด๋ฅผ ํ•œ๊ตญ์–ด๋กœ ๋ฒˆ์—ญํ•˜๋ ค๊ณ  ์ ˆ์ฐจ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ๋˜์–ด๋ฒ„๋ ค์„œ ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ๋žŒ๋“ค์ด ํ”„๋กœ์‹œ์ €๊ฐ€ ์•„๋‹Œ ์ด๋ฆ„ ๊ทธ๋Œ€๋กœ ์œ„์—์„œ ์•„๋ž˜๋กœ ํ˜๋Ÿฌ๊ฐ€๋Š” "์ ˆ์ฐจ"์—๋งŒ ์ง‘์ค‘ํ•˜๊ฒŒ ๋˜๋Š” ํ—คํ”„๋‹(?)์ด ๋ฒŒ์–ด์ง„ ๊ฒƒ์ด๋‹ค.
 
ํ”„๋กœ์‹œ์ €๋Š” ๊ณง ์šฐ๋ฆฌ๊ฐ€ ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•˜๋ฉด์„œ ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” "ํ•จ์ˆ˜"๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค. ์ฆ‰, ํฐ ๊ธฐ๋Šฅ(๋ชฉํ‘œ)์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์ž‘์€ ๋‹จ์œ„์˜ ๊ธฐ๋Šฅ(ํ•จ์ˆ˜)์„ ๋งŒ๋“ค์–ด ๋ชจ๋“ˆํ™” ํ•˜๋ฉด์„œ ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๋ชจ๋“ˆํ™”๋Š” ๋ฐ˜๋ณตํ•˜์—ฌ ํ™œ์šฉ๋  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋Š” ๊ธฐ๋Šฅ(ํ•จ์ˆ˜)์„ ๋ฌถ์–ด ์žฌํ™œ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ๋” ๋‚˜์•„๊ฐ€, ๋ชจ๋“ˆํ™” ํ•œ ํ•จ์ˆ˜๋ฅผ ํ”„๋กœ๊ทธ๋žจ์˜ ์ˆœ์„œ์™€ ํ๋ฆ„์— ๋งž๋Š” ์ ์ ˆํ•œ ์œ„์น˜์— ํ˜ธ์ถœํ•˜๋ฉด์„œ ์ „์ฒด์ ์ธ ํ”„๋กœ๊ทธ๋žจ์ด ์œ ๊ธฐ์ ์œผ๋กœ ์—ฐ๊ฒฐ๋˜๊ฒŒ ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.
 
์ •๋ง ๋Ÿฌํ”„ํ•˜๊ฒŒ ๋งํ•˜์ž๋ฉด, ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ๋ฅผ ํ’€๋‹ค๊ฐ€ ์ฝ”๋“œ ์ค„์ด ๋„ˆ๋ฌด ๊ธธ์–ด์ ธ ์•Œ์•„๋ณด๊ธฐ ์‰ฝ๊ฒŒ ํŠน์ • ๋กœ์ง์„ ํ•จ์ˆ˜๋กœ ๋งŒ๋“ค์–ด ๋นผ๋†“๊ณ  ๊ทธ ์ž๋ฆฌ์— ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค๋˜๊ฐ€, ํ˜‘์—… ์ค‘์— ๋™๋ฃŒ ๊ฐœ๋ฐœ์ž๋“ค๊ณผ ๊ฐ™์ด ์ž์ฃผ ์‚ฌ์šฉํ•  ๋งŒํ•œ ์œ ํ‹ธ๋ฆฌํ‹ฐ ๊ธฐ๋Šฅ์„ ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๋”ฐ๋กœ ๋งŒ๋“ค์–ด ํ•„์š”ํ•  ๋•Œ ์ ์ ˆํ•œ ์œ„์น˜์— ํ˜ธ์ถœํ•˜๋ฉฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™๋‹ค.


๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ

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

๊ฐ์ฒด์ง€ํ–ฅ์˜ ๋Œ€ํ‘œ์ ์ธ ์˜ˆ์‹œ

 
์Šคํƒ€ํฌ๋ž˜ํ”„ํŠธ์˜ ๊ฐ ์œ ๋‹›๋“ค์„ ์ ˆ์ฐจ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์‚ฌ์šฉํ•ด์„œ ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด์ž. ๊ณต๊ฒฉ, ์น˜๋ฃŒ, ์ด๋™ ๋“ฑ์˜ ๊ธฐ๋Šฅ์„ ํ•˜๋Š” ํ•จ์ˆ˜๋“ค์€ ๋ชจ๋“ˆํ™”๊ฐ€ ๊ฐ€๋Šฅํ• ์ง€ ๋ชจ๋ฅด์ง€๋งŒ, ๊ฐ ์œ ๋‹› ์ž์ฒด๋ฅผ ๋ชจ๋“ˆํ™” ํ•  ์ˆ˜ ์žˆ๊ฒ ๋Š”๊ฐ€? ์œ„ ์‚ฌ์ง„์ฒ˜๋Ÿผ ๋งŽ์€ ์œ ๋‹›๋“ค์„ ๋ Œ๋”๋ง ํ•˜๊ธฐ ์œ„ํ•ด์„œ Dictionary๋‚˜ Map ๊ฐ™์€ Key-Value ํƒ€์ž…์˜ ๋ณ€์ˆ˜๋กœ ์„ ์–ธํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด์ž. ์„œ๋กœ ๋‹ค๋ฅธ ์ข…๋ฅ˜์˜ ์œ ๋‹›์ด๋ผ๋„ ์ฒด๋ ฅ์ด๋‚˜ ์ข…์กฑ ๊ฐ™์€ ๊ณตํ†ต์˜ Key ๊ฐ’์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค. ์ด๋•Œ, ๊ตณ์ด ๊ณตํ†ต์˜ Key ๊ฐ’์— ๋Œ€ํ•ด ๋ฐ˜๋ณต์ ์œผ๋กœ ์„ ์–ธ์„ ํ•ด์ค„ ํ•„์š” ์—†์ด ํ•จ์ˆ˜์— ๋งค๊ฐœ ๋ณ€์ˆ˜๋กœ ๋„˜๊ฒจ์ฃผ๋“ฏ์ด Value ๊ฐ’๋งŒ ๋„˜๊ฒจ์ฃผ๋ฉด ํ•ด๋‹น Key์— ๋Œ€ํ•œ Value ๊ฐ’์œผ๋กœ ์ ์šฉ๋  ์ˆ˜ ์žˆ๊ฒŒ ๋ชจ๋“ˆํ™” ํ•˜๋ฉด ์œ ์ง€๋ณด์ˆ˜ ์ธก๋ฉด์—์„œ ์–ผ๋งˆ๋‚˜ ์ข‹์„๊นŒ?
 
๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ์ด๋ ‡๊ฒŒ ๋ฐ์ดํ„ฐ ๊ทธ ์ž์ฒด๋ฅผ ๋ชจ๋“ˆํ™” ํ•˜์ง€ ๋ชปํ•˜๋Š” ์ ˆ์ฐจ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ํ•œ๊ณ„์ ์„ "๊ฐ์ฒด"๋ผ๋Š” ๋ชจ๋“ˆํ™” ๋œ ๋ฐ์ดํ„ฐ์˜ ๊ฐœ๋…์„ ๋„์ž…ํ•˜์—ฌ ํ•ด๊ฒฐํ•˜์˜€๋‹ค. 
 

์ถœ์ฒ˜) https://wikidocs.net/113438

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

๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์ค‘์š” ํ‚ค์›Œ๋“œ

1) ํด๋ž˜์Šค, ์ธ์Šคํ„ด์Šค, ์ธํ„ฐํŽ˜์ด์Šค
2) ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ 4๊ฐ€์ง€ ํŠน์ง• - ์ถ”์ƒํ™”, ์บก์Šํ™”(์€๋‹‰ํ™”), ์ƒ์†์„ฑ, ๋‹คํ˜•์„ฑ
3) ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์„ค๊ณ„์›์น™ - SOLID ์›์น™
4) GoF ๋””์ž์ธ ํŒจํ„ด - ์ƒ์„ฑ ํŒจํ„ด, ๊ตฌ์กฐ ํŒจํ„ด, ํ–‰์œ„ ํŒจํ„ด
 
๋ฌด์กฐ๊ฑด ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด ๋ชจ๋“ˆํ™”๋ฅผ ํ•œ๋‹ค๊ณ  ํ•ด์„œ ์œ ์ง€๋ณด์ˆ˜ํ•˜๊ธฐ ์ข‹์€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ฏ€๋กœ ๊ผญ ์œ„์˜ ์ค‘์š” ํ‚ค์›Œ๋“œ๋ฅผ ๊ณต๋ถ€ํ•ด ๋ณด๊ณ  ์ž์‹ ์˜ ์ฝ”๋“œ์— ์ ์šฉํ•ด ๋ณด๊ธฐ ๋ฐ”๋ž€๋‹ค.


ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ

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

// ๋ช…๋ นํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ

const numbers = [1, 2, 3, 4, 5, 6];
const filteredNumbers = [];
for (let i = 0; i < numbers.length; i++) {
    if (numbers[i] % 2 === 0) {
        filteredNumbers.push(numbers[i]);
    }
}

const squaredNumbers = [];
for (let i = 0; i < filteredNumbers.length && squaredNumbers.length < 3; i++) {
    squaredNumbers.push(filteredNumbers[i] ** 2);
}

let sum = 0;
for (let i = 0; i < squaredNumbers.length; i++) {
    sum += squaredNumbers[i];
}

console.log(sum);

 

// ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ

const numbers = [1, 2, 3, 4, 5, 6];

const result = numbers
  .filter(num => num % 2 === 0)
  .map(num => num ** 2)
  .slice(0, 3)
  .reduce((acc, curr) => acc + curr);

console.log(result);

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

๋™์ผํ•œ ์ž…๋ ฅ์— ๋Œ€ํ•ด ํ•ญ์ƒ ๋™์ผํ•œ ์ถœ๋ ฅ์„ ๋ฐ˜ํ™˜ํ•˜๋ฉฐ, ๋ถ€์ž‘์šฉ(Side Effect) ์ด ์—†๋Š” ํ•จ์ˆ˜๋ฅผ ๋งํ•œ๋‹ค.
์ฆ‰, ํ•จ์ˆ˜์˜ ์‹คํ–‰์€ ์˜ค์ง ์ธ์ž์—๋งŒ ์˜์กดํ•˜๊ณ  ์™ธ๋ถ€ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๋Š”๋‹ค.

 
์ˆœ์ˆ˜ ํ•จ์ˆ˜์™€ ์ˆœ์ˆ˜ ํ•จ์ˆ˜๊ฐ€ ์•„๋‹Œ ํ•จ์ˆ˜์˜ ์ฐจ์ด๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ์˜ˆ์ œ ์ฝ”๋“œ๋ฅผ ๋ณด์ž
 

var a: [Int] = [2, 3, 1, 4, 5]

let b = a.sort()

var c: [Int] = [2, 3, 1, 4, 5]

let d = c.sorted()

print("๊ฒฐ๊ณผ: ", a, b, c, d)

// ๊ฒฐ๊ณผ: [1, 2, 3, 4, 5] () [2, 3, 1, 4, 5] [1, 2, 3, 4, 5]

 
๊ฒฐ๋ก ๋ถ€ํ„ฐ ๋งํ•˜์ž๋ฉด, sorted()๋Š” ์ˆœ์ˆ˜ ํ•จ์ˆ˜์ด๊ณ  sort() ํ•จ์ˆ˜๋Š” ์ˆœ์ˆ˜ ํ•จ์ˆ˜๊ฐ€ ์•„๋‹ˆ๋‹ค. sorted()๋Š” ์™ธ๋ถ€ ์ƒํƒœ, ์ฆ‰ c์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ”๊พธ์ง€ ์•Š๋Š”๋‹ค. ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ๋ฐ์ดํ„ฐ์˜ ๋ถˆ๋ณ€์„ฑ์„ ์ง€ํ–ฅํ•œ๋‹ค. ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ”๊พธ๋Š” ํ–‰์œ„๋Š” ๊ทธ๋กœ ์ธํ•ด ์˜๋„ํ•˜์ง€ ์•Š์€ ๊ฒฐ๊ณผ(Side Effect)๋ฅผ ์ดˆ๋ž˜ํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ์ˆœ์ˆ˜ ํ•จ์ˆ˜์˜ ์‚ฌ์šฉ์œผ๋กœ ์ด๋Ÿฌํ•œ Side Effect๊ฐ€ ๋ฐœ์ƒํ•  ์—ฌ์ง€์กฐ์ฐจ ์ฃผ์ง€ ์•Š๊ฒ ๋‹ค๋ผ๋Š” ์ปจ์…‰์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„์ธ ๊ฒƒ์ด๋‹ค. ๋” ๋‚˜์•„๊ฐ€, Side Effect๊ฐ€ ์ดˆ๋ž˜๋˜์ง€ ์•Š์œผ๋‹ˆ ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์žฅ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.
 
์ด๋Ÿฌํ•œ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ๊ธฐ์ˆ ์˜ ๋ฐœ๋‹ฌ๋กœ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ์˜ ์ž‘์—…์ด ๋นˆ๋ฒˆํ•˜๊ฒŒ ๋ฐœ์ƒํ•˜๋Š” ์š”์ฆ˜ ๊ฐ™์€ ์‹œ๋Œ€์— ์ ํ•ฉํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ, ์ฆ‰ ๋™์‹œ์„ฑ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ๊ฐ€์žฅ ํฐ ์ ์€ ๊ฐ’์ด ๋ณ€ํ•˜๋Š” ๋ฐ์ดํ„ฐ, ์ฆ‰ ๋ณ€์ˆ˜์ด๋‹ค. ๋‘ ์Šค๋ ˆ๋“œ๊ฐ€ ๋™์ผํ•œ ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ํ•˜๋‚˜๋Š” +1, ํ•˜๋‚˜๋Š” -1์„ ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ? ๋‹น์—ฐํžˆ Side Effect๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜๋ฐ–์— ์—†๋‹ค. ๋”ฐ๋ผ์„œ, ์ด๋Ÿฌํ•œ Side Effect๊ฐ€ ์ƒ๊ธฐ์ง€ ์•Š๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ง€ํ–ฅํ•˜๋Š” ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ๊ฐ๊ด‘๋ฐ›๊ณ  ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

๋Œ“๊ธ€