← Back to NOTES 🌰 ← Effective JavaScript 🤿
← 아이템 18 - 함수, 메서드, 생성자 호출의 차이를 이해하라
고차함수(Higher-Order Function)는 다른 함수를 인자로 받거나 함수를 결과로 반환하는 함수다. 이는 JavaScript의 강력한 기능 중 하나로, 함수형 프로그래밍의 핵심 개념이며 코드의 재사용성과 추상화 수준을 높여준다.
// 고차함수 예시 1: 함수를 인자로 받는 경우
[3, 1, 4, 1, 5, 9].sort(function(x, y) {
if (x < y) return -1;
if (x > y) return 1;
return 0;
}); // [1, 1, 3, 4, 5, 9]
// 화살표 함수 버전
[3, 1, 4, 1, 5, 9].sort((x, y) => {
if (x < y) return -1;
if (x > y) return 1;
return 0;
});
// 고차함수 예시 2: 배열 메서드들
const numbers = [1, 2, 3, 4, 5];
// map - 변환
const doubled = numbers.map(x => x * 2); // [2, 4, 6, 8, 10]
// filter - 필터링
const evens = numbers.filter(x => x % 2 === 0); // [2, 4]
// reduce - 축약
const sum = numbers.reduce((acc, x) => acc + x, 0); // 15
// forEach - 반복
numbers.forEach(x => console.log(x));
// 고차함수 예시 3: 함수를 반환하는 경우
function createMultiplier(factor) {
return function(x) {
return x * factor;
};
}
const double = createMultiplier(2);
const triple = createMultiplier(3);
console.log(double(5)); // 10
console.log(triple(5)); // 15
// 고차함수 예시 4: 커링(Currying)
function curry(fn) {
return function(a) {
return function(b) {
return fn(a, b);
};
};
}
function add(a, b) {
return a + b;
}
const curriedAdd = curry(add);
const add5 = curriedAdd(5);
console.log(add5(3)); // 8
// 고차함수 예시 5: 함수 조합
function compose(f, g) {
return function(x) {
return f(g(x));
};
}
const addOne = x => x + 1;
const multiplyByTwo = x => x * 2;
const addOneThenMultiplyByTwo = compose(multiplyByTwo, addOne);
console.log(addOneThenMultiplyByTwo(3)); // 8 ((3 + 1) * 2)