[JavaScript] 클로저

HyeonE·2025년 5월 27일

JS

목록 보기
13/17
post-thumbnail

✅ 클로저란?

클로저는 함수가 선언될 때의 렉시컬 환경(Lexical Environment)을 기억하고, 해당 환경에 접근할 수 있는 함수를 의미합니다.

즉, 외부 함수의 변수에 접근할 수 있는 내부 함수이며,
외부 함수의 실행 컨텍스트가 종료된 후에도 내부 함수가 외부 함수의 변수에 접근할 수 있는 현상을 말합니다.


📌 왜 중요한가요?

• 데이터 은닉 및 캡슐화 구현 가능
• 특정 상태를 기억하거나 유지할 수 있음
• 함수형 프로그래밍 패턴에서 자주 활용됨


📁 클로저 예시

function outer() {
  const name = "현중";
  
  function inner() {
    console.log(name); // 외부 스코프에 있는 name 참조
  }

  return inner;
}

const myFunc = outer();
myFunc(); // "현중" 출력

outer() 함수가 호출되면서 name 변수는 outer의 렉시컬 환경에 저장됩니다.
inner() 함수는 name에 대한 참조를 유지합니다.
outer() 함수가 종료되었지만, inner() 함수는 여전히 name에 접근 가능합니다.


클로저의 활용: 정보 은닉

function counter() {
  let count = 0;
  
  return {
    increase() {
      count++;
      console.log(count);
    },
    decrease() {
      count--;
      console.log(count);
    }
  };
}

const myCounter = counter();
myCounter.increase(); // 1
myCounter.increase(); // 2
myCounter.decrease(); // 1

• count 변수는 외부에서 직접 접근할 수 없고 increase, decrease 함수로만 접근 가능 → 캡슐화


📝 Point

  • 외부 함수의 실행 컨텍스트 종료 후에도 내부 함수가 외부 변수에 접근 가능한 현상
  • 캡슐화, 상태 유지, 정보 은닉
  • 불필요한 참조 유지로 인한 메모리 누수 가능성, 필요하지 않은 경우 참조를 해제해야 한다
profile
프론트엔드 개발자가 되고싶은 대학생

0개의 댓글