Currying

About

์ˆ˜ํ•™๊ณผ ์ปดํ“จํ„ฐ ๊ณผํ•™์—์„œ ์ปค๋ง(currying)์ด๋ž€ ๋‹ค์ค‘ ์ธ์ˆ˜(ํ˜น์€ ์—ฌ๋Ÿฌ ์ธ์ˆ˜์˜ ํŠœํ”Œ)์„ ๊ฐ–๋Š” ํ•จ์ˆ˜๋ฅผ ๋‹จ์ผ ์ธ์ˆ˜๋ฅผ ๊ฐ–๋Š” ํ•จ์ˆ˜๋“ค์˜ ํ•จ์ˆ˜์—ด๋กœ ๋ฐ”๊พธ๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค. - ์œ„ํ‚ค๋ฐฑ๊ณผ

์ปค๋ง(Currying)์ด๋ž€ ์ธ์ž๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ ๋ฐ›๋Š” ํ•จ์ˆ˜๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ ์ธ์ž๋ฅผ ํ•˜๋‚˜์”ฉ๋งŒ ๋ฐ›๋Š” ํ•จ์ˆ˜์˜ ์ฒด์ธ์œผ๋กœ ๋งŒ๋“œ๋Š” ๊ธฐ๋ฒ•์ด๋‹ค.

ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ๋ฒ• ์ค‘ ํ•˜๋‚˜๋กœ, ์ฃผ๋กœ ํ•จ์ˆ˜๋ฅผ ํ™•์žฅ, ์žฌ์‚ฌ์šฉํ•˜๊ณ  ๊ฐ€๋…์„ฑ์„ ๋†’์ด๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.

๊ทผ๋ฐ ์ปค๋ฆฌ๋Š” ์นด๋ ˆ ์•„๋‹Œ๊ฐ€? ์‹ถ์„ ์ˆ˜ ์žˆ๋‹ค. ๐Ÿ˜“

์ปค๋ง์„ ๋ฐœ์ „์‹œํ‚จ ์‚ฌ๋žŒ์ธ ํ•˜์Šค์ผˆ ์ปค๋ฆฌ์˜ ์ด๋ฆ„์„ ๋”ฐ์„œ ์ง€์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ปค๋ง์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

(ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด ํ•˜์Šค์ผˆ๋„ ๊ทธ์˜ ์ด๋ฆ„์„ ๋”ฐ์„œ ๋งŒ๋“ค์—ˆ๋‹ค.)

Example

๋‹ค์Œ multiply3์€ a, b, c๋ฅผ ์ธ์ž๋กœ ๋ฐ›์•„ ์„ธ ๋ณ€์ˆ˜์˜ ๊ณฑ์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค.

function multiply3(a, b, c) {
  return a * b * c
}
console.log(multiply(1, 2, 3)) // 6

์ด๋ฅผ ์ปค๋ง์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

const multiply3 = a => b => c => a * b * c
console.log(currying(1)(2)(3)) // 6

const multiplyWith2 = currying(1)(2) // ํ•ญ์ƒ 2๋ฅผ ๊ณฑํ•˜๋„๋ก ํ•œ๋‹ค.
console.log(multiplyWith2(3)) // 6

Notes

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

currying(1)(2)(3)(4) ... (100)

ํ•จ์ˆ˜ํ˜• ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ์ €์ž์ธ ๋งˆ์ดํด ํฌ๊ฑฐ์Šค๋„ '์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” ์ปค๋ง๋ณด๋‹ค๋Š” ๋ถ€๋ถ„ ์ ์šฉ์ด ๋” ์‹ค์šฉ์ '์ด๋ผ๊ณ  ๋งํ•œ๋‹ค.

๋งˆ์ดํด ํฌ๊ฑฐ์Šค์˜ ๋ธ”๋กœ๊ทธ๋„ ๊ฝค ํž™ํ•œ ๊ฒƒ ๊ฐ™๋‹ค. ๋‚˜์ค‘์— ์ฐธ๊ณ ํ•ด๋„ ๊ดœ์ฐฎ๊ฒ ๋‹ค ๐Ÿ˜Ž

Last updated