minstudio

실행 컨텍스트와 클로저 (Closure)

클로저는 "함수가 선언될 당시의 렉시컬 환경(Lexical Environment)을 기억하는 현상"입니다. 외부에서 접근할 수 없는 은닉화된(Private) 변수를 만들 때 유용하게 쓰입니다.

클로저(Closure) 시각화

자판기 안의 동전(count)은 밖에서 마음대로 조작할 수 없고,
오직 정해진 버튼(return된 함수들)을 통해서만 조작이 가능합니다.

function createCounter() {
  // 1. 이 변수는 외부에서 직접 접근할 수 없습니다 (Private)
  let count = 0; 

  // 2. 하지만 내부에서 반환된 함수들은 이 변수를 '기억'합니다 (클로저)
  return {
    increase: function() {
      count++;
      return count;
    },
    decrease: function() {
      count--;
      return count;
    },
    getCount: function() {
      return count;
    }
  };
}

const myCounter = createCounter();
console.log(myCounter.count); // undefined (직접 접근 불가)

console.log(myCounter.increase()); // 1
console.log(myCounter.increase()); // 2
console.log(myCounter.decrease()); // 1
console.log(myCounter.getCount()); // 1
실행 결과
실행 컨텍스트와 클로저 (Closure) | Minstudio