커링 함수
currying function
커링 함수를 왜 사용할까?
커링 함수를 사용하면 함수의 재사용성을 높일 수 있다.
커링 함수의 첫 번째 인자 → 설정(옵션) 등
커링 함수의 두 번째 인자 → 적용 대상, 값 등
커리 함수 활용
커리 함수 방법론에 따라 커리함수(비교함수)(배열)
방식으로 함수를 작성하여 실행할 수 있다.
currySortArray(function (x, y) {
return x - y;
})(originalArray);
JavaScript에서는 커리 함수를 구현하기 위해 클로저 패턴을 사용한다.
function currySortArray(function(compareCallback) {
return function(array) {
var copyArray = array.slice()
return copyArray.sort(compareCallback)
}
})
결과적으로 커리함수()()
는 먼저 실행 ()
된 함수가 함수를 결과 값으로 반환하므로, 연결지어 실행 ()
할 수 있다. 작성된 커리 함수를 사용해 오름차순, 내림차순 유틸리티 함수를 만들어 사용할 수도 있다.
// 커리 함수의 첫번째 실행은 함수 값을 반환 (비교 함수 전달)
var ascSortArray = currySortArray(function (x, y) {
return x - y;
});
var descSortArray = currySortArray(function (x, y) {
return y - x;
});
// 오름차순 정렬 (새로운 배열 반환)
ascSortArray(originalArray);
// 내림차순 정렬 (새로운 배열 반환)
descSortArray(originalArray);
ES5 vs ES6
커리 함수를 활용한 유틸리티를 작성하는 JavaScript 버전 별 방법을 비교해보자.
ES5
function currySortArray(function(compareCallback) {
return function(array) {
return array.slice().sort(compareCallback)
}
})
var ascSortArray = currySort(function(x, y) { return x - y})
var descSortArray = currySort(function(x, y) { return y - x})
ES6
const currySortArray = (compareCallback) => (array) =>
[...array].sort(compareCallback);
const ascSortArray = currySortArray((x, y) => x - y);
const descSortArray = currySortArray((x, y) => y - x);
유틸리티 활용
ascSortArray(originalArray); // [-31, 1, 10, 20, 101]
descSortArray(originalArray); // [101, 20, 10, 1, -31]
정리
내가 이해한 커리 함수 내용
함수형 프로그래밍 중 하나이다. 만약 여러개의 인자를 받는 함수가 있다면 각각의 인자들을 각각 단일 인지로 만들어 순차적으로 실행시킬 수 있는 것을 말한다.
function Fn(a, b) {
var ab = a * b;
return function (c) {
return ab + c;
};
}
Fn(1, 2)(3); // 5
커리 함수의 목적은 함수 재사용에 있다. 특히! 리액트에서는 자주 사용한다고 하니까 지금 완벽하게 알지 못하더라도 익숙해 질 수 있도록 기본적인 개념은 알고 있도록 하자!
참고
Last updated
Was this helpful?