Closure, 클로저 함수

웹 개발/Study 2022. 3. 1. 02:12

클로저는 자바스크립트의 고유한 개념이 아니라, 여러 함수형 프로그래밍 언어에서 공통적으로 발견되는 특성이다. 

한마디로 정리하자면 자신이 선언될 당시의 환경을 기억하는 함수이다.

// 클로저를 만드는 형태 1. - 중첩함수
function outerFn() {
  let x = 10;
  return function innerFn(y) { // innerFn 함수는 클로저다.
    return x = x + y;
  }
}
let a = outerFn(); // 외부함수 호출은 한번만. 이제 a 변수는 innerFn 함수를 참조한다.
a(5); // 15;
a(5); // 20;
a(5); // 25;
// 클로저를 만드는 형태 2. - 전역에 선언한 변수를 박스 안에서 함수로 정의하고 전역에서 호출
let globalFunc;
{
  let x = 10;
  globalFunc = function(y) { // globalFunc 함수는 클로저다.
    return x = x + y;
  }
}
globalFunc(5); // 15;
globalFunc(5); // 20;
globalFunc(5); // 25;

1. 클로저는 내부함수가 외부함수의 맥락(context)에 접근 할 수 있는 것을 가리킨다.

2. 외부로 전달이 항상  return을 의미하는 것은 아니다.

3. 클로저는 특정 상황에서 발생하는 "현상"이고 함수는 이 현상이 나타나기 위한 "조건"에 해당한다.

장점

1. 데이터를 보전할 수 있다.

클로저 함수는 외부 함수의 실행이 끝나더라도 외부 함수 내 변수를 사용 할 수 있다.

클로저는 이처럼 특정 데이터를 스코프 안에 가두어둔 채로 계속 사용할 수 있게 하는 폐쇄성을 갖는다.

2. 정보의 접근 제한 (캡슐화)

'클로저 모듈 패턴'을 사용해 객체에 담아 여러개의 함수를 리턴하도록 만든다.

이러한 정보의 접근을 제한하는 것을 캡슐화라고 한다.

3. 모듈화에 유리하다.

클로저 함수를 각각의 변수에 할당하면 각자 독립적으로 값을 사용하고 보존할 수 있다.

이와 같이 함수의 재사용성을 극대화, 함수 하나를 독립적인 부품의 형태로 분리하는 것을 모듈화라고 한다.

클로저를 통해 데이터와 메소드를 묶어다닐 수 있기에 클로저는 모듈화에 유리하다.

'웹 개발 > Study' 카테고리의 다른 글

babel 과 polyfill  (0) 2022.03.02
let, var, const 차이점  (0) 2022.03.01
웹팩 dependencies 설정  (0) 2021.08.20
React 기초 연습  (0) 2021.03.25
객체 지향 설계의 다섯가지 원칙  (0) 2021.03.21
: