일급 함수
JavaScript 일급 함수
개요
JavaScript에서 일급 함수(First-class Function)는 함수가 프로그래밍 언어의 기본 자료형으로 취급되는 특성을 의미합니다. 이는 함수를 변수에 할당하거나, 다른 함수의 인자로 전달하거나, 함수에서 반환할 수 있는 기능을 포함합니다. 이러한 특성 덕분에 JavaScript는 함수형 프로그래밍 스타일을 지원하며, 콜백 함수, 클로저, 고차 함수 등의 개념이 자연스럽게 활용됩니다.
일급 함수의 특징
1. 변수에 함수 할당
함수는 객체처럼 변수에 저장될 수 있습니다. 이는 함수를 동적으로 참조하거나 재사용할 때 유용합니다.
const greet = function(name) {
return `안녕, ${name}!`;
};
console.log(greet("민수")); // "안녕, 민수!"
2. 함수를 인자로 전달
함수는 다른 함수의 매개변수로 전달될 수 있습니다. 이는 콜백 패턴에서 자주 사용됩니다.
function execute(fn, value) {
return fn(value);
}
const result = execute(function(x) { return x * 2; }, 5);
console.log(result); // 10
3. 함수 반환
함수는 다른 함수의 반환값으로 사용될 수 있습니다. 이는 클로저(Closure) 생성에 필수적입니다.
function createAdder(base) {
return function(num) {
return base + num;
};
}
const add5 = createAdder(5);
console.log(add5(3)); // 8
4. 데이터 구조에 저장
함수는 배열, 객체 등에 저장되어 동적인 로직 처리에 활용될 수 있습니다.
const operations = [
function(a, b) { return a + b; },
function(a, b) { return a - b; }
];
console.log(operations[0](2, 3)); // 5
활용 사례
1. 콜백 함수
비동기 처리(예: 이벤트 핸들러, AJAX 요청)에서 자주 사용됩니다.
document.addEventListener("click", function() {
console.log("버튼 클릭됨");
});
2. 클로저 활용
외부 함수의 스코프에 접근 가능한 내부 함수를 생성할 수 있습니다.
function counter() {
let count = 0;
return function() {
return ++count;
};
}
const increment = counter();
console.log(increment()); // 1
console.log(increment()); // 2
3. 함수형 프로그래밍 패턴
[map](/doc/%EA%B8%B0%EC%88%A0/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/JavaScript/map)
, [filter](/doc/%EA%B8%B0%EC%88%A0/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/JavaScript/filter)
, [reduce](/doc/%EA%B8%B0%EC%88%A0/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/JavaScript/reduce)
등 배열 메서드에서 일급 함수의 강점을 발휘합니다.
const numbers = [1, 2, 3];
const squared = numbers.map(function(n) { return n * n; });
console.log(squared); // [1, 4, 9]
일급 함수와 고차 함수
고차 함수(Higher-order Function)
일급 함수를 기반으로 한 고차 함수는 함수를 인자로 받거나 함수를 반환하는 함수를 의미합니다.
// 고차 함수 예시
function higherOrder(fn) {
return fn();
}
higherOrder(function() { console.log("실행됨"); });
일급 함수와의 관계
일급 함수는 언어 차원의 기능(함수를 값처럼 취급)을 의미하고, 고차 함수는 이를 활용한 디자인 패턴입니다.
개념 | 정의 | 예시 함수 |
---|---|---|
일급 함수 | 함수가 값처럼 사용될 수 있는 특성 | function() {} |
고차 함수 | 함수를 인자로 받거나 반환하는 함수 | map() , filter() |
주의사항
1. 메모리 관리
클로저는 외부 함수의 스코프를 유지하므로 메모리 누수(Memory Leak)가 발생할 수 있습니다.
function memoryLeakExample() {
const largeData = new Array(1000000).fill("x");
return function() {
return largeData.length; // largeData가 계속 참조됨
};
}
2. 가독성 저하
복잡한 함수 중첩은 코드 이해를 어렵게 만들 수 있습니다.
// 비추천
const result = [1,2,3].map(x => x * 2).filter(x => x > 3);
3. 성능 최적화
함수 생성은 상대적으로 비용이 높으므로, 반복적인 함수 생성을 피해야 합니다.
// 비효율적
for (let i = 0; i < 1000; i++) {
const fn = function() {}; // 반복 생성
}
참고 자료
- MDN Web Docs: Functions
- JavaScript.info: Functions are objects
- W3Schools: JavaScript Higher Order Functions
이 문서는 JavaScript의 일급 함수 개념과 실용적인 활용 방법을 설명합니다. 함수형 프로그래밍 스타일을 적용하면 코드의 모듈화와 재사용성이 향상되며, 이는 복잡한 애플리케이션 개발에 유리합니다.
이 문서는 AI 모델(qwen-3-235b-a22b)에 의해 생성된 콘텐츠입니다.
주의사항: AI가 생성한 내용은 부정확하거나 편향된 정보를 포함할 수 있습니다. 중요한 결정을 내리기 전에 반드시 신뢰할 수 있는 출처를 통해 정보를 확인하시기 바랍니다.