자바스크립트는 함수가 일급 객체로 취급되기 때문에, 함수 내에 함수를 정의하는 것이 가능합니다. 이러한 함수를 “내부 함수” 또는 “중첩 함수”라고 부릅니다. 내부 함수는 외부 함수의 스코프에서 선언되어 변수와 파라미터에 접근할 수 있습니다. 이렇게 함으로써 코드의 구조화와 모듈화를 용이하게 할 수 있습니다.
내부 함수의 선언
내부 함수는 외부 함수 내에서 선언될 수 있으며, 이를 통해 외부 함수의 변수와 파라미터에 접근할 수 있습니다. 다음은 내부 함수를 선언하는 간단한 예제입니다.
function outerFunction() {
const outerVariable = "Hello";
function innerFunction() {
console.log(outerVariable);
}
innerFunction();
}
outerFunction(); // 출력: Hello
위 예제에서 innerFunction
은 outerFunction
내에서 선언되었습니다. innerFunction
은 outerVariable
에 접근하여 값을 출력하는 기능을 수행합니다. outerFunction
은 호출되면 내부 함수 innerFunction
도 함께 호출되어 “Hello”라는 값을 출력합니다.
내부 함수의 활용
내부 함수는 외부 함수의 스코프를 공유하기 때문에, 외부 함수에서 선언된 변수를 내부 함수에서 활용할 수 있습니다. 이를 통해 코드의 재사용성과 모듈화를 향상시킬 수 있습니다. 예를 들어, 다음은 클로저(Closure)를 이용하여 카운터를 구현하는 예제입니다.
function counter() {
let count = 0;
function increment() {
count++;
console.log(count);
}
function decrement() {
count--;
console.log(count);
}
return {
increment,
decrement
};
}
const myCounter = counter();
myCounter.increment(); // 출력: 1
myCounter.increment(); // 출력: 2
myCounter.decrement(); // 출력: 1
위 예제에서 counter
함수는 increment
와 decrement
내부 함수를 반환합니다. 이렇게 함으로써 count
변수는 외부 함수인 counter
의 스코프 내에서 유지되면서, increment
와 decrement
함수에서 접근 및 수정할 수 있습니다. 이를 통해 캡슐화된 카운터 객체를 생성할 수 있습니다.
결론
자바스크립트의 내부 함수는 코드의 구조화와 모듈화를 용이하게 해주는 강력한 기능입니다. 내부 함수를 활용하여 변수와 파라미터에 접근하여 재사용성과 모듈화를 증가시킬 수 있습니다. 유지보수성과 가독성을 향상시키기 위해 내부 함수를 적절히 활용하는 것이 좋습니다.