동글이의 STORY
고차함수 / 커링 / 부분적용함수 본문
728x90
반응형
SMALL
함수형 프로그램 사용 이유
- 부수효과 감소
- 동일한 입력이 들어가면 동일한 출력이 나오게 하여 가독성과 유지보수를 용이
🔶 고차함수
- 함수를 입력받아서 함수를 반환하는 함수
- 즉, 함수 실행이 완전히 끝날때까지 최소한 두 단계에 걸친 매개변수가 존재
- 완전히 완료되기 전에 여러번 호출 되어야함
const decimalCalculator = denominator => numerator => decimalPoint => {
const num = numerator/denominator
return num.toFixed(decimalPoint)
}
const divideByThree = decimalCalculator(3) => 5번째 줄
const devideTenByThree = divideByThree(10) => 6번째 줄
console.log(devideTenByThree(3)) // 3.333
console.log(decimalCalculator(3)(10)(3)) // 3.333
🔶 부분적용함수 (particial application)
- n개의 인자를 받는 함수에 미리 m개의 인자만 넘겨 기억시켰다가, 나중에 (n-m)개의 인자를 넘기면 비로소 원래 함수의 실행결과를 얻을 수 있게끔 하는 함수
- 고차함수를 한 번 호출하면 계속해서 사용할 수 있는 새로운 함수가 반환된다는 점이 강점
- ex)
- 분모가 3으로 결정된 상태에서, 분자가 계속 바뀐다면devideByThree함수를 재활용하며 인자로 분자만 계속 넘겨주면 됨
- 분모가 3 분자가 10으로 결정된 상태에서, 소수점 자리수가 계속 바뀐다면 devideTenByThree함수를 재활용하며 인자로 소수점 자리만 계속 넘겨주면 됨
- ex)
🔶 커링 (currying)
- 커링 함수는 여러개의 인수를 받는 함수에서 정확히 인수 하나만 받는 일련의 함수를 반환할 때 사용
일반적인 커링
// 커링 변환을 하는 curry(f) 함수 (일반함수 ver)
function curry(f) {
return function(a) {
return function(b) {
return f(a, b);
};
};
}
// 커링 변환을 하는 curry(f) 함수 (화살표함수 ver)
const curry = f => a => b => f(a, b);
// f에 전달된 함수
const sum = (a, b) => a + b;
const curriedSum = curry(sum);
console.log(curriedSum(1)(2)); // 3
🔻lodash를 통한 커링
lodash를 사용하면 좀 더 간단하게 커링을 구현 가능
const _ = require('lodash');
const sum = (a, b) => a + b;
const curriedSum = _.curry(sum);
console.log(curriedSum(1)(2));
- lodash 라이브러리를 사용하여 curry함수를 사용자가 직접 정의할 필요 없이, _.curry를 사용하여 함수를 인수로 전달하여 curriedSum을 정의
728x90
반응형
LIST