← 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)