실행 컨텍스트와 클로저 (Closure)
클로저는 "함수가 선언될 당시의 환경(주변 변수들)을 기억하는 마법"입니다. 밖에서는 접근할 수 없는 나만의 비밀 변수(Private)를 만들 때 사용합니다.
클로저(Closure) 시각화
자판기 안의 동전(count)은 밖에서 마음대로 조작할 수 없고,
오직 정해진 버튼(return된 함수들)을 통해서만 조작이 가능합니다.
function createCounter() {
// 1. 이 count 변수는 함수 안에 있으므로 외부에서 직접 볼 수 없습니다 (Private)
let count = 0;
// 2. 하지만 여기서 반환하는 "내부 함수"들은 자기가 태어난 환경의 count 변수를 평생 '기억'합니다 (이것이 클로저!)
return {
increase: function() {
count++;
return count;
},
decrease: function() {
count--;
return count;
},
getCount: function() {
return count;
}
};
}
const myCounter = createCounter();
// 외부에서는 count 변수에 마음대로 접근할 수 없습니다. (안전하게 보호됨!)
console.log("직접 접근 시도:", myCounter.count); // undefined
// 오직 정해진 버튼(increase, decrease)을 통해서만 값을 조작할 수 있습니다.
console.log("증가:", myCounter.increase()); // 1
console.log("증가:", myCounter.increase()); // 2
console.log("감소:", myCounter.decrease()); // 1
console.log("현재 값:", myCounter.getCount()); // 1