클로저

김내현·2024년 10월 28일

개인공부

목록 보기
7/51

A closure is the combination of a function and the lexical environment within which that function was declared
"클로저는 어떤 함수와 해당 함수가 선언된 렉시컬 환경의 조합이다."

상위 함수보다 하위 함수가 더 오래 살아 있는 경우를 closure라고 함

  function outer() {
    let a = 10;
    return function inner() {
      a++;
      console.log(a);
    };
  }
  const fn = outer();
  const fn2 = outer();
  fn();
  fn2();
  fn2();
  /////////////////////////////
    function make(m) {
    return function (x) {
      return x * m;
    };
  }
  const d = make(2);
  const t = make(3);
  console.log(d(5));
  console.log(t(6));

클로저 사용패턴

캡슐화(은닉화)
함수 팩토리: 특정 기능을 하는 함수를 고정할 때
비동기 프로그램 패턴 : 비동기적으로 코드를 실행할 수 있게 해줌
메모이제이션(데이터 캐싱)

가비지 컬렉션

더 이상 참조되지 않는 객체를 메모리에서 자동으로 해제하는 프로세스
메모리 누수 방지 -> 프로그램의 안전성 높임

동작원리

1.루트 객체를 기준으로 참조 그래프 생성
2.참조 그래프를 탐색하여, 더 이상 참조되지 않는 객체를 찾음
3.더 이상 참조되지 않는 객체를 메모리에서 해제
가비지 컬렉션은 자바스크립 엔진이 자동으로 수행하므로, 개발자는 메모리 관리를 신경 쓸 필요가 없다.

클로저와 가비지 컬렉션의 관계

클로저는 함수가 선언된 시점의 변수를 계속해서 참조하기 때문에, 가비지 컬렉션이 클로저를 해제하지 못하고 메모리 누수
따라서 클로저를 사용할 때는 불필요한 참조를 제거하는 것이 중요
예를 들어, 클로저 내부에서 더 이상 사용되지 않는 변수를 null로 설정하여, 가비지 컬렉션이 이를 해제할 수 있도록 해야 한다.
이를 통해 메모리 누수를 방지하고, 프로그램의 성능을 최적화할 수 있다.

참조

0개의 댓글