클로저
클로저(Closure) 는 함수가 자신이 생성된 환경(변수)을 기억하는 것입니다.
쉽게 말하면
함수가 끝나도 그 안의 변수가 사라지지 않고 유지되는 현상이에요.
예시
function outer() {
let count = 0; // 외부 함수의 변수
function inner() {
count++; // 외부 변수를 기억하고 접근
console.log(count);
}
return inner;
}
const counter = outer(); // outer 함수 실행 끝남
counter(); // 1
counter(); // 2
counter(); // 3
outer() 함수는 끝났는데, count 변수가 살아있어요!
원래대로라면?
function outer() {
let count = 0;
}
outer();
// 함수 끝 → count 변수 사라짐 (원래는 이게 정상)
클로저가 생기는 조건
function 외부함수() {
let 변수 = 값;
function 내부함수() {
// 외부함수의 변수 사용
}
return 내부함수; // 내부함수를 반환
}
내부 함수가 외부 함수의 변수를 참조하면, 그 변수가 기억된 채로 유지됩니다.
실용적인 예시
// 클로저로 private 변수 만들기
function createCounter() {
let count = 0; // 외부에서 직접 접근 불가
return {
increment: () => ++count,
decrement: () => --count,
getCount: () => count
};
}
const counter = createCounter();
counter.increment(); // 1
counter.increment(); // 2
counter.getCount(); // 2
// count 변수에 직접 접근 불가능
한줄 요약
클로저 = 함수가 자신이 만들어진 환경의 변수를 기억하고 접근할 수 있는 것