---
id: "고차 함수(Higher-Order Function) 20260407"
created: "2026-04-07 15:55"
tags:
aliases:
---
## 💡 생각  
이곳에 하나의 생각 또는 아이디어를 작성합니다.

---
## 📑 개념
함수를 다루는 함수라고 생각하면 쉬워요.
함수가 다음 중 **하나 이상**을 수행한다면 고차 함수라고 부릅니다.

## 고차 함수의 두 가지 조건

### 1. 함수를 인자로 전달받음

다른 함수를 매개변수(Parameter)로 넘겨받아 실행하는 경우입니다. 이때 인자로 전달되는 함수를 보통 **콜백 함수(Callback Function)** 라고 부릅니다.

- **예시:** `Array.prototype.map()`, `filter()`, `forEach()` 등
    ``` javascript
    const numbers = [1, 2, 3];
    // 여기서 map은 고차 함수이고, (n => n * 2)는 콜백 함수입니다.
    const doubled = numbers.map(n => n * 2); 
    ```
    

### 2. 함수를 결과로 반환함

함수 실행의 결과물로 새로운 함수를 만들어 내보내는 경우입니다. 이 방식은 **클로저(Closure)** 나 **커링(Currying)** 기법을 구현할 때 자주 쓰입니다.

- **예시:**
    ``` javascript
    function makeMultiplier(multiplier) {
        // 함수 자체를 반환합니다.
        return function(value) {
            return value * multiplier;
        };
    }
    const triple = makeMultiplier(3);
    console.log(triple(10)); // 30
    ```

---
## 왜 고차 함수를 쓰나요?

고차 함수를 사용하면 코드의 **추상화 수준**을 높일 수 있습니다.

1. **코드의 재사용성:** 복잡한 로직(반복문, 조건문 등)은 고차 함수 내부에 숨기고, 실제 수행할 구체적인 작업만 함수로 갈아 끼울 수 있습니다.
    
2. **가독성 향상:** `for` 문을 돌리며 배열을 수정하는 대신, `filter`나 `map` 같은 명칭을 사용함으로써 코드가 무엇을 하려는지 의도를 명확히 드러낼 수 있습니다.
    
3. **함수형 프로그래밍:** 데이터를 직접 변경하지 않고 새로운 데이터를 생성하는 방식(불변성 유지)을 구현하기에 최적입니다.