--- 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. **ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°:** 데이터λ₯Ό 직접 λ³€κ²½ν•˜μ§€ μ•Šκ³  μƒˆλ‘œμš΄ 데이터λ₯Ό μƒμ„±ν•˜λŠ” 방식(λΆˆλ³€μ„± μœ μ§€)을 κ΅¬ν˜„ν•˜κΈ°μ— μ΅œμ μž…λ‹ˆλ‹€.