์ฝ๋์คํ ์ด์ธ ๋ถํธ์บ ํ๋ฅผ ์งํํ๋ฉด์ "์ปค๋งํจ์"์ "๊ณ ์ฐจํจ์ ์ฌ๊ณ ์์ค์ ์ถ์ํ"์ ๋ํด ํ์ตํ์๋ค.
"์๋ฐ์คํฌ๋ฆฝํธ์ ๊น์ ๋ณต์ฌ๋ฅผ ์ง์ํ๋ ๋ด์ฅํจ์๊ฐ ์ ์์๊น?"์ ์ด์ด ๋๋ฒ์งธ ์ง๋ฌธ! "์ปค๋งํจ์๋ ์ ์ฌ์ฉํ๋๊ฑธ๊น?"์ ๋ํด ์์๋ณด๊ณ ์ ์ฌ๋ฌ ๊ฒ์์ ํตํด ๋๋ฆ๋๋ก ์ ๋ฆฌํด๋ณด์๋ค.
์๋ฐ์คํฌ๋ฆฝํธ๋ ํ๋กํ ํ์
๊ธฐ๋ฐ์ ๊ฐ์ฒด์งํฅ ๋ชจ๋ธ ์ธ์ด์ด๋ค.
๊ทธ๋ฆฌ๊ณ ES6 ์ดํ class ๋ฌธ๋ฒ์ ๋ฑ์ฅ์ผ๋ก ํด๋์ค๋ฅผ ์ด์ฉํ ๊ฐ์ฒด์งํฅ์ ํํ๋ก ๊ฐ๋ฐ ํ ์ ์๊ฒ๋์๋ค.
React์์๋ ํด๋์ค ๋ฌธ๋ฒ์ ์ ๊ทน ์ฌ์ฉํ์ฌ ํด๋์ค ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ธฐ๋ณธ์ด์๋ ๋๊ฐ ์์๋ค.
ํ์ง๋ง ์ต๊ทผ hook์ ๋ฑ์ฅ์ผ๋ก ํจ์ํ ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ฃผ๊ฐ ๋์๋ค.
์๋ฐ์คํฌ๋ฆฝํธ๋ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ๋ ๊ฐ๋ฅํ๋ค. ๋ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ด ์์ฆ ํธ๋ ๋(?)๋ผ๋ ์๋ฌธ์ ์ ํ ๊ฒ ๊ฐ๋ค.
์ด์ ๋ํด ์ ๋ฆฌ๋ ์ ํ๋ธ๊ฐ ์์ด ๋ณด๊ณ ๊ฐ๋ตํ ์ ๋ฆฌํด๋ณด์๋ค.
๋๋ฆผ์ฝ๋ฉ - ํจ์ํํ๋ก๊ทธ๋๋ฐ์ด ๋์ธ๋ค?! (ํจ์ํ vs ๊ฐ์ฒด์งํฅ)
ํจ์ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ํนํ๋ ์ธ์ด
ํจ์ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ฅผ ์ง์ํ๋ ์ธ์ด
1958๋ ์ฒซ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ธ LISP์ ๋ฑ์ฅ์ C์ธ์ด๋ณด๋ค๋ 10์ฌ๋ ์ด์ ๋น ๋ฅด๋ฉฐ, ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ณด๋ค ๋ฑ์ฅ์ด ๋น ๋ฅด๋ค.
ํ์ง๋ง ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ์ํ์ ์๋ฆฌ์ ๋ฐ์ ํ๊ฒ ์ฐ๊ด๋์ด์๊ธฐ์ ๋ฐฐ์ฐ๊ธฐ์ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๋ฉฐ ๋ํดํ๊ฒ ์ฌ๊ฒจ์ง ์ ์๋ค.
๋ฐ๋ผ์ ์ฌ๋์ ์ฌ๊ณ ๋ฐฉ์๊ณผ ๊ฐ์ฅ ๊ฐ๊น์ด ์ ์ฐจ์งํฅ ํ๋ก๊ทธ๋๋ฐ๊ณผ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ด ๋ฐฐ์ฐ๊ธฐ ์ฝ๋ค๊ณ ์ฌ๊ฒจ์ง๊ธฐ์ ๋ ๋ณดํธ์ ์ผ๋ก ๋ง์ด ์ฌ์ฉ๋์๋ค.
ํ์ง๋ง ์ต๊ทผ ๋ค์ด ๋นํธ์ฝ์ธ, AI์ ๋ฑ์ฅ์ผ๋ก ๋ฐฉ๋ํ ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ฒ ๊ณ์ฐํด์ ๋ณ๋ ฌ์ , ์์ ์ ์ผ๋ก ์ฒ๋ฆฌํ๋ ๊ฒ์ด ์ค์ํด์ง๋ฉด์ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ด ๋ค์ ์ฃผ๋ชฉ์ ๋ฐ์๋ค.
Expression (if, switch, for.. ์ฌ์ฉํ์ง ์์)
์ผ๊ธ ๊ฐ์ฒด์ ํน์ง๊ณผ ๊ณ ์ฐจํจ์์ ์์ฑ์ ๊ฐ์ง๊ณ ์์ด์ผ ํจ
[์ผ๊ธ ๊ฐ์ฒด์ ์กฐ๊ฑด]
- ๋ณ์์ ํ ๋น(assignment)ํ ์ ์๋ค.
- ๋ค๋ฅธ ํจ์์ ์ ๋ฌ์ธ์(argument)๋ก ์ ๋ฌ๋ ์ ์๋ค.
- ๋ค๋ฅธ ํจ์์ ๊ฒฐ๊ณผ๋ก์จ ๋ฆฌํด๋ ์ ์๋ค.
[๊ณ ์ฐจํจ์]
- ํจ์๋ฅผ ์ ๋ฌ์ธ์๋ก ๋ฐ์ ์ ์๊ณ , ํจ์๋ฅผ ๋ฆฌํดํ ์ ์๋ ํจ์
์ปค๋ง ํจ์๋ฅผ ์ค๋ช ํ๊ธฐ ์ ์ ์ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ๋ํด ๋จผ์ ์์๋ณธ ์ด์ ๋ ์ปค๋ง(currying) ํจ์๋ผ๋ ์ด๋ฆ์ด ํ์ค์ผ ์ปค๋ฆฌ(Haskell Brooks Curry)๋ผ๋ ๋ถ์ผ๋ก ๋ถํฐ ์ ๋ ๋๊ธฐ ๋๋ฌธ์ด๋ค.
tistory - ์ ์ปค๋ง (currying) ์ด ๋ ์ข์?
ํ์ค์ผ ์ปค๋ฆฌ๋ ํ์ค์ผ์ด๋ผ๋ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ฅผ ๋ง๋ค์์ผ๋ฉฐ, ํ์ค์ผ์์๋ ํจ์์ ๋งค๊ฐ๋ณ์๋ฅผ 1๊ฐ๋ก ๊ฐ์ ํ์ฌ ์ปค๋งํจ์(ํฉ์ฑํจ์)๋ฅผ ๋ง๋๋ ๊ฒ์ด ์์ฐ์ค๋ฝ๋ค๊ณ ํ๋ค.
์ฆ, ์ปค๋งํจ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ผ๋ก ์์ฑํ๋ค๊ณ ์๊ฐํ ์ ์๋ค.
function curry(f) { // ์ปค๋ง ๋ณํ์ ํ๋ curry(f) ํจ์
return function(a) {
return function(b) {
return f(a, b);
};
};
}
// usage
function sum(a, b) {
return a + b;
}
let curriedSum = curry(sum);
alert( curriedSum(1)(2) ); // 3
function sum(a, b) {
return a + b;
}
let carriedSum = _.curry(sum);
๊ฐ์ธ๋ธ๋ก๊ทธ - ์ฝ๊ณ ๋น ๋ฅด๊ฒ ์ปค๋ง(Currying) ๊ธฐ๋ฒ ์ดํดํ๊ธฐ(feat.์๋ฐ์คํฌ๋ฆฝํธ)
์ฅ์
๋จ์
์์ ์ ๋ฆฌํ๋ ๋๋ฆผ์ฝ๋ฉ์ ์์ ๋ง์ง๋ง ๋ด์ฉ์ ์ธ์ฉํ๋ฉฐ ์ด ๊ธ์ ๋ง๋ฌด๋ฆฌํ๋ ค๊ณ ํ๋ค.
UI ์ดํ๋ฆฌ์ผ์ด์ ํน์ฑ์ ๋ง์ ์ํ๋ณํ๊ฐ ์ผ์ด๋๊ธฐ ๋๋ฌธ์ ์์ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ๋ง์ ์ด์ฉํด์๋ ์กฐ๊ธ ๋ฌด๋ฆฌ๊ฐ ์๊ธฐ์, ์ฌ์ฉํ๋ ์ธ์ด์ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์ ์ ์ ํ ์ฌ์ฉํ๋ค๋ฉด ๋ณด๋ค ์์ ์ ์ธ ํ๋ก๊ทธ๋๋ฐ์ ํ ์ ์๋ค!
์ถ์ฒ
tistory - ์ ์ปค๋ง (currying) ์ด ๋ ์ข์?
javascript info - ์ปค๋ง
velog - [JavaScript] - ์ปค๋ง์ ๋ํด ์์๋ณด์
tistory - ์ปค๋ง(currying)
github - [Swift]์ปค๋ง(Currying)์ด๋?
๊ฐ์ธ๋ธ๋ก๊ทธ - ์ฝ๊ณ ๋น ๋ฅด๊ฒ ์ปค๋ง(Currying) ๊ธฐ๋ฒ ์ดํดํ๊ธฐ(feat.์๋ฐ์คํฌ๋ฆฝํธ)