Spring

(์ง€ํ”ผํ‹ฐ ์„ ์ƒ๋‹˜์˜) ๋žŒ๋‹ค์™€ ์ผ๊ธ‰ ๊ฐ์ฒด, FP ํŠน๊ฐ•

99duuk 2024. 12. 12. 14:38

๐Ÿฑ  ๋ง๋ฐฅ: ๋žŒ๋‹ค์™€ ์ผ๊ธ‰ ๊ฐ์ฒด

๋žŒ๋‹ค๋ฅผ ์ด๋ ‡๊ฒŒ ์ƒ๊ฐํ•ด๋ด. ‘์ฝ”๋“œ๋ฅผ ๋ฐ”๋กœ ์†์— ๋“ค๊ณ  ์“ธ ์ˆ˜ ์žˆ๋Š” ์ž‘์€ ์กฐ๊ฐ’ ๊ฐ™์€ ๊ฑฐ์•ผ. ํ•œ ๋ฒˆ, ์ด๋Ÿฐ ์ƒ์ƒ์„ ํ•ด๋ณด์ž:

๐Ÿณ ์š”๋ฆฌ์‚ฌ ์ด์•ผ๊ธฐ
์š”๋ฆฌ์‚ฌ๊ฐ€ ์žˆ๋Š”๋ฐ, ์ด ์‚ฌ๋žŒ์€ ํŠน๋ณ„ํ•œ ๋ ˆ์‹œํ”ผ ์—†์ด๋„ ์Œ์‹์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๋Œ€๋‹จํ•œ ์‹ค๋ ฅ์ž์•ผ. "์ด ์žฌ๋ฃŒ๋กœ ์ด๋ ‡๊ฒŒ ํ•ด์ค˜!"๋ผ๊ณ ๋งŒ ๋งํ•˜๋ฉด ๋ฐ”๋กœ ์š”๋ฆฌ๋ฅผ ์‹œ์ž‘ํ•˜์ง€. ์ด๊ฒŒ ๋ฐ”๋กœ ๋žŒ๋‹ค์•ผ. **ํ•„์š”ํ•œ ์žฌ๋ฃŒ(์ธ์ž)**๋ฅผ ์ฃผ๊ณ , **์–ด๋–ป๊ฒŒ ์š”๋ฆฌํ• ์ง€(๋™์ž‘)**๋ฅผ ๊ฐ„๋‹จํžˆ ์ •์˜ํ•˜๋ฉด ๋.

๋žŒ๋‹ค๋ฅผ ์“ฐ๋ฉด ๊ธด ๋ ˆ์‹œํ”ผ(ํ•จ์ˆ˜ ์ •์˜)๋ฅผ ์ƒ๋žตํ•˜๊ณ , ์งง๊ณ  ๊ท€์—ฌ์šด ํ•œ ์ค„๋กœ '์ž‘์—… ์ง€์‹œ์„œ'๋ฅผ ์ ์„ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด์ง€!


๐ŸŽฉ ์ผ๊ธ‰ ๊ฐ์ฒด๋ž€?

์ด์ œ ๋ฌด๋Œ€๋กœ ๋„˜์–ด๊ฐ€ ๋ณด์ž. ์ผ๊ธ‰ ๊ฐ์ฒด๋Š” VIP!
์ด VIP๋Š” ๋‹ค๋ฅธ '์ผ๋ฐ˜์ ์ธ ๊ฐ’'์ฒ˜๋Ÿผ ๋†€ ์ˆ˜ ์žˆ๋Š” ์•„์ฃผ ๋ฉ‹์ง„ ์ž๊ฒฉ์„ ๊ฐ€์ง„ ์กด์žฌ์•ผ. ์˜ˆ๋ฅผ ๋“ค์–ด ํ•จ์ˆ˜๋‚˜ ๋žŒ๋‹ค๋ฅผ ๋ง์ด์ง€.

  1. VIP์˜ ์ž๊ฒฉ์ฆ:
    • ๋ณ€์ˆ˜์— ๋‹ด์„ ์ˆ˜ ์žˆ์–ด! (let myFunction = function() { ... };)
    • ๋‹ค๋ฅธ ํ•จ์ˆ˜์— ์žฌ๋ฃŒ๋กœ ์ค„ ์ˆ˜ ์žˆ์–ด! (doSomething(myFunction))
    • ํ•จ์ˆ˜์—์„œ ์ƒˆ๋กœ ๋งŒ๋“ค์–ด์„œ ๋Œ๋ ค์ค„ ์ˆ˜๋„ ์žˆ์–ด! (return function() { ... };)

๊ฒฐ๋ก ์ ์œผ๋กœ, ‘ํ•จ์ˆ˜’๋ฅผ ๋งˆ์น˜ ์ˆซ์ž๋‚˜ ๋ฌธ์ž์—ด์ฒ˜๋Ÿผ ์ž์œ ๋กญ๊ฒŒ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒŒ ์ผ๊ธ‰ ๊ฐ์ฒด์˜ ํ•ต์‹ฌ์ด์•ผ.

 

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

๊ฒฐ๋ก : ๋žŒ๋‹ค์™€ ์ผ๊ธ‰ ๊ฐ์ฒด๋Š” ์š”๋ฆฌ์‚ฌ์—๊ฒŒ '์žฌ๋ฃŒ์™€ ๋„๊ตฌ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์จ์„œ ์ตœ๊ณ  ์š”๋ฆฌ๋ฅผ ๋งŒ๋“ค์–ด์ฃผ๋Š” ๋น„๋ฒ•'๊ณผ ๊ฐ™์•„! ๐Ÿ™‚

 

์™œ ์ค‘์š”ํ• ๊นŒ?

์ผ๊ธ‰ ๊ฐ์ฒด๊ฐ€ ๋˜๋ฉด ํ”„๋กœ๊ทธ๋žจ์—์„œ ์œ ์—ฐํ•˜๊ณ  ๊ฐ•๋ ฅํ•œ ๋™์ž‘์ด ๊ฐ€๋Šฅํ•ด์ ธ! ์˜ˆ๋ฅผ ๋“ค์–ด:

  • ๊ณ ์ฐจ ํ•จ์ˆ˜: ํ•จ์ˆ˜๋ฅผ ์ธ์ž๋กœ ๋„˜๊ธฐ๊ฑฐ๋‚˜ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฑธ ์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ์–ด.
  • ์ฝœ๋ฐฑ ํŒจํ„ด: ํŠน์ • ๋™์ž‘์„ ์‹คํ–‰ํ•˜๋Š” ํ•จ์ˆ˜๋“ค์„ ์›ํ•˜๋Š” ๋Œ€๋กœ ๋ฐ”๊ฟ” ๋ผ์šธ ์ˆ˜ ์žˆ์–ด.
  • ์žฌ์‚ฌ์šฉ์„ฑ๊ณผ ๊ฐ€๋…์„ฑ: ์ž‘์€ ๋‹จ์œ„๋กœ ์ชผ๊ฐœ์„œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋‹ˆ ์œ ์ง€๋ณด์ˆ˜๋„ ์‰ฌ์›Œ์ง€๊ณ , ์žฌ์‚ฌ์šฉ๋„ ๊ฐ„๋‹จํ•ด์ ธ.

๐ŸŽฉ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ(FP)๊ณผ์˜ ์—ฐ๊ฒฐ๊ณ ๋ฆฌ!

๋žŒ๋‹ค์™€ ์ผ๊ธ‰ ๊ฐ์ฒด๋Š” **ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ(Functional Programming)**์—์„œ ์•„์ฃผ ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•ด.
"FP๊ฐ€ ๋ญ๋ƒ?"๊ณ  ๋ฌป๋Š”๋‹ค๋ฉด ์ด๋ ‡๊ฒŒ ์„ค๋ช…ํ• ๊ฒŒ:

ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ๋งˆ์น˜ ๋ ˆ๊ณ  ๋ธ”๋ก์œผ๋กœ ๋ฌด์–ธ๊ฐ€๋ฅผ ์กฐ๋ฆฝํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์ƒ๊ฐํ•˜๋ฉด ๋ผ.

  • ๊ฐ ๋ธ”๋ก(ํ•จ์ˆ˜)์€ ๋…๋ฆฝ์ ์ด๊ณ  ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ด์•ผ ํ•˜๊ณ , ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ๋Œ€๋กœ ์—ฐ๊ฒฐํ•ด์„œ ๊ฑฐ๋Œ€ํ•œ ๊ตฌ์กฐ๋ฌผ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์–ด.
  • ๊ทธ๋Ÿฐ๋ฐ, ์ด๋Ÿฐ ๋ธ”๋ก์ด ๊นจ๋—ํ•˜๊ณ  ํŠผํŠผํ•ด์•ผ ํ•˜๊ฒ ์ง€? ๊ทธ๋ž˜์„œ FP๋Š” ๋‹ค์Œ ๋‘ ๊ฐ€์ง€๋ฅผ ํ•ต์‹ฌ์œผ๋กœ ์‚ผ์•„:
    1. ์ˆœ์ˆ˜์„ฑ(Purity): ๋ธ”๋ก ์•ˆ์—์„œ ๋†€๊ณ  ๋‚˜๋ฉด ์ฃผ๋ณ€์— ํ”์ ์„ ๋‚จ๊ธฐ์ง€ ์•Š์•„์•ผ ํ•ด. (Side-effect๋ฅผ ํ”ผํ•˜์ž!)
    2. ๋ถˆ๋ณ€์„ฑ(Immutability): "์›๋ž˜ ์žˆ๋˜ ๊ฑด ์†๋Œ€์ง€ ๋ง๊ณ  ์ƒˆ ๊ฑฐ๋ฅผ ๋งŒ๋“ค์–ด์„œ ์ค˜!"๋ผ๋Š” ์ฒ ํ•™์„ ์ค‘์š”์‹œํ•ด.

 

FP๋ฅผ ์™œ ์ข‹์•„ํ• ๊นŒ?

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

๐Ÿฑ ๋‹ค์‹œ '๋ง๋ฐฅ'์œผ๋กœ ๋Œ์•„์™€: FP์˜ ์žฌ๋ฏธ์žˆ๋Š” ์˜ˆ

๐Ÿณ ์—„๋งˆ์™€ ์•„๋“ค ์ด์•ผ๊ธฐ
์—„๋งˆ๊ฐ€ ์•„๋“ค์—๊ฒŒ ์‹ฌ๋ถ€๋ฆ„์„ ์‹œ์ผœ.
“๊ฐ€์„œ ์‚ฌ๊ณผ ์‚ฌ ์™€!”
๊ทธ๋Ÿฐ๋ฐ ์•„๋“ค์€ ๋ง์„ ์ž˜ ๋“ค์–ด๋„ ์ง‘์— ์‚ฌ๊ณผ๋งŒ ๋‚จ๊ฒจ๋†“๊ณ , ์‹ฌ๋ถ€๋ฆ„ ๊ธฐ๋ก์€ ๊นจ๋—ํ•˜๊ฒŒ ์ง€์›Œ๋†”.
์•„๋“ค์˜ ํ–‰๋™์€ FP ๋ฐฉ์‹๊ณผ ๋‹ฎ์•˜์–ด. ์™œ๋ƒ๋ฉด:

  1. ์‚ฌ๊ณผ๋งŒ ์‚ฌ๊ณ , ๊ทธ ์™ธ์˜ ์žก์ผ์€ ์ ˆ๋Œ€ ์•ˆ ํ•ด! (์ˆœ์ˆ˜ ํ•จ์ˆ˜)
  2. ์›๋ž˜ ์ง‘์— ์žˆ๋˜ ๊ฒƒ๋“ค์€ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š๊ณ , ์‚ฌ๊ณผ๋Š” ๋ณ„๋„๋กœ ๋‘ฌ! (๋ถˆ๋ณ€์„ฑ)

์ด๊ฒŒ ๋ฐ”๋กœ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ์ถ”๊ตฌํ•˜๋Š” ์ฒ ํ•™์ด์ง€.

 




๐Ÿ“Œ ๋„ค ์ •๋ฆฌํ•œ ๋‚ด์šฉ์˜ ํ๋ฆ„

  1. ์ผ๊ธ‰ ๊ฐ์ฒด
    • "ํ•จ์ˆ˜๋ฅผ ๋ฐ์ดํ„ฐ์ฒ˜๋Ÿผ ๊ฐ–๋‹ค ์“ฐ๊ฑฐ๋‚˜ ๋ฆฌํ„ดํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ."
      → ์™„์ „ ๋งž์•„.
      ์ž๋ฐ”๋Š” ํ•จ์ˆ˜๊ฐ€ ์ผ๊ธ‰ ๊ฐ์ฒด๋Š” ์•„๋‹ˆ์ง€๋งŒ, ๋žŒ๋‹ค์™€ ํ•จ์ˆ˜ํ˜• ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ์ผ๊ธ‰ ๊ฐ์ฒด์ฒ˜๋Ÿผ ์“ธ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์คŒ.
  2. ๋žŒ๋‹ค
    • "์ž๋ฐ”์—์„œ ํ•จ์ˆ˜๋ฅผ ์ผ๊ธ‰ ๊ฐ์ฒด์ฒ˜๋Ÿผ ์“ธ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด๊ณ , ์ž‘์„ฑํ•ด์•ผ ํ•  ํ•จ์ˆ˜๋ฅผ ์š”์•ฝํ•ด์„œ ํ•ต์‹ฌ๋งŒ ๋”ฑ ์ ์–ด์ค€๋‹ค."
      → ๋”ฑ ๋งž์Œ.
      ํ•จ์ˆ˜ํ˜• ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ™œ์šฉํ•ด์„œ ๋žŒ๋‹ค๋ฅผ ๋ณ€์ˆ˜์ฒ˜๋Ÿผ ์ „๋‹ฌํ•˜๊ฑฐ๋‚˜ ์งง์€ ์ฝ”๋“œ๋กœ ๋™์ž‘ ์ •์˜ ๊ฐ€๋Šฅ.
  3. FP(ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ)
    • "ํ•จ์ˆ˜๋ฅผ ์กฐํ•ฉํ•ด์„œ ๋ญ˜ ๋งŒ๋“œ๋Š” ๊ฑด๋ฐ, ํ•ต์‹ฌ์€ ํ•จ์ˆ˜์˜ ์กฐํ•ฉ."
      → ๋งž์•„!
      FP๋Š” ์ž‘์€ ํ•จ์ˆ˜๋“ค์„ ์กฐํ•ฉํ•ด ํฐ ๋™์ž‘์„ ๋งŒ๋“œ๋Š” ๊ฑฐ๊ณ , ์ด๊ฒŒ ๊ฐ€๋Šฅํ•œ ์ด์œ ๋Š” ํ•จ์ˆ˜๊ฐ€ ์ผ๊ธ‰ ๊ฐ์ฒด์ฒ˜๋Ÿผ ์“ฐ์ด๊ธฐ ๋•Œ๋ฌธ.
  4. ๊ฒฐ๋ก 
    • "FP์—์„œ ์ค‘์š”ํ•œ ๊ฑด ์ผ๊ธ‰ ๊ฐ์ฒด๋‹ค. ํ•จ์ˆ˜์˜ ์กฐํ•ฉ์€ ํ•จ์ˆ˜๋ฅผ ๊ฐ–๋‹ค ์“ฐ๊ฑฐ๋‚˜ ๋ฆฌํ„ดํ•  ์ˆ˜ ์žˆ์–ด์•ผ ๊ฐ€๋Šฅํ•˜๋‹ˆ๊นŒ."
      → ์™„๋ฒฝ!
      FP์˜ ์ฒ ํ•™์€ ํ•จ์ˆ˜ ์ž์ฒด๋ฅผ ๊ฐ’์ฒ˜๋Ÿผ ๋‹ค๋ฃจ๋Š” ๊ฒƒ์— ๊ธฐ๋ฐ˜ํ•˜๊ณ , ๊ทธ๊ฒŒ ๋ฐ”๋กœ ์ผ๊ธ‰ ๊ฐ์ฒด์™€ ๋žŒ๋‹ค ๋•๋ถ„์— ๊ฐ€๋Šฅ.

๐Ÿ’ก ์ถ”๊ฐ€๋กœ ๊ธฐ์–ตํ•˜๋ฉด ์ข‹์€ ์ 

  • ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ๋ณธ์งˆ:
    ํ•จ์ˆ˜ ์กฐํ•ฉ ์™ธ์—๋„, ์ˆœ์ˆ˜ ํ•จ์ˆ˜, ๋ถˆ๋ณ€์„ฑ๋„ ์ค‘์š”!
    ๐Ÿ‘‰ ์˜ˆ๋ฅผ ๋“ค์–ด, FP์—์„œ๋Š” ํ•จ์ˆ˜๊ฐ€ ์™ธ๋ถ€ ์ƒํƒœ๋ฅผ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š๊ณ  ์ž…๋ ฅ๊ฐ’๋งŒ์œผ๋กœ ๊ฒฐ๊ณผ๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•จ.
  • ๋žŒ๋‹ค์™€ ์ŠคํŠธ๋ฆผ API์˜ ์กฐํ•ฉ:
    ์ž๋ฐ”์—์„œ FP๋ฅผ ์‹คํ˜„ํ•˜๋ ค๋ฉด ๋žŒ๋‹ค์™€ ์ŠคํŠธ๋ฆผ API๋ฅผ ๊ผญ ์•Œ์•„์•ผ ํ•ด. ์ŠคํŠธ๋ฆผ์€ ๋ฐ์ดํ„ฐ๋ฅผ ํ•จ์ˆ˜ํ˜• ๋ฐฉ์‹์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋„๋ก ๋„์™€์คŒ.