JavaScript에서는 함수가 1급 객체(First-Class Citizen) 로 취급됩니다.
즉, 함수도 숫자나 문자열처럼 값처럼 다룰 수 있는 존재입니다.
✅ "값처럼 할당, 전달, 반환이 가능한 존재"
함수를 변수에 저장하거나, 인자로 전달하거나, 반환값으로 사용할 수 있다는 것이 핵심입니다.
const add = function (a, b) {
return a + b;
};
console.log(add(2, 3)); // 5
function repeat(n, callback) {
for (let i = 0; i < n; i++) {
callback(i);
}
}
repeat(3, console.log);
// 0
// 1
// 2
function makeAdder(x) {
return function (y) {
return x + y;
};
}
const add5 = makeAdder(5);
console.log(add5(3)); // 8
🔁 연관 개념
🌀 클로저 (Closure)
내부 함수가 외부 함수의 변수에 접근하고 이를 기억하는 구조
함수가 반환된 이후에도 외부 변수의 값을 계속 "기억"할 수 있음
React에서 useEffect, 이벤트 핸들러, setTimeout 등에 사용 시 주의 필요
🔼 고차 함수 (Higher-Order Function)
함수를 인자로 받거나, 함수를 반환하는 함수
Array.map, filter, reduce 같은 고차 배열 메서드
withAuth(Component) 같은 HOC 패턴이나 커스텀 훅도 고차 함수 기반
🎯 면접 자주 출제 포인트
"JavaScript에서 함수는 왜 1급 객체인가요?"
"함수형 컴포넌트에서 클로저 문제는 왜 발생하고, 어떻게 해결하나요?"
setState(prev => ...)으로 해결할 수 있습니다.🚀 왜 중요한가요?
JavaScript에서 함수가 1급 객체이기 때문에 콜백, 클로저, 고차 함수, 이벤트 핸들링, Hooks 등 다양한 패턴이 가능
React 함수형 컴포넌트의 동작 원리를 이해하기 위한 기초 체계
상태 관리, 비동기 처리, 최적화에서 발생하는 stale closure 문제 해결의 기반