Closure

이짜젠·2021년 10월 3일
0

반환된 내부함수에 의해서 외부함수의 스코프가 유지되는 환경
반환된 내부함수에 의해서만 외부함수의 스코프에 접근/수정이 가능한 환경

Closure폐쇄 라는 사전적 의미를 갖고있다.

자바스크립트에서는 외부에서 변수에 접근하는 방법을 폐쇄해주는 방법으로도 정의 할 수 있을 것 같다.
이런 특징으로 클로저는 객체지향프로그래밍의 정보은닉라는 개념을 구현하기위한 용도로 사용된다.

클로저를 이해하기위해선 스코프개념을 이해해야한다.
자바스크립트의 스코프에 대해 간단히 정리해보자.

스코프 란?

  • 변수가 저장되는 논리적인 공간이자, 변수의 유효범위이다.
  • 기본적으로 함수단위로 스코프를 갖는다. (ES6부턴 블록스코프도 사용이 가능하다.)
  • 스코프는 함수가 호출되면 생성되고, 끝나면 사라진다.
  • 스코프는 중첩이 가능하다.
  • 내부스코프는 외부스코프로 접근이 가능하고, 그 역은 불가능하다.

위의 개념들을 이용해서, Closure를 만들어보자.

function outerFn() {
  let number = 1;
  
  function innerFn() {
    // 내부함수에서 외부스코프의 변수를 사용하지않는다면 클로져가 아니다!
    return ++number;
  }
  
  return innerFn;
}

const increment = outerFn();

console.log(increment()); // 2
console.log(increment()); // 3
console.log(number); // Uncaught ReferenceError: number is not defined

number변수가 보호되는 Closure가 만들어졌다.

  • number는 오직 increment 함수에 의해서만 수정이 가능하다.
  • outerFn의 함수의 실행이 끝났지만, innerFn 스코프에 의해 outerFn 스코프공간이 유지되고있다. (number 변수가 살아있다.)

이렇게 특정 변수에 대한 접근이 return 된 내부함수에 의해서만 가능해진 환경을 Closure라고 부른다.

참고

https://velog.io/@proshy/JS%ED%81%B4%EB%A1%9C%EC%A0%B8closure%EC%99%80-%ED%81%B4%EB%A1%9C%EC%A0%B8%EC%9D%98-%EC%82%AC%EC%9A%A9-%EC%98%88%EC%A0%9C

profile
오늘 먹은 음식도 기억이 안납니다. 그래서 모든걸 기록합니다.

0개의 댓글