Closer의 뜻은 닫는 것, (종료를 알리는 신호가 되는) 행위이다.
본론으로 넘어가보자.
클로저는 함수가 선언될 당시의 환경을 기억했다가 나중에 호출되었을 때 원래의 환경에 따라 수행하는 함수이다.
이름이 클로저인 이유는 함수 선언 시의 스코프를 포섭하여 이후 실행될 때 이용하기 때문이다.
실무에서 클로저를 가장 많이 사용하는 언어는 자바 스크립트이다.
클로저의 장점은 다음과 같다.
1. 데이터 보존
외부 함수의 샐행이 끝나도, 외부 함수 내 변수를 사용할 수 있다.
2. 정보의 접근 제한
'클로저 모듈 패턴'을 사용해 객체에 담아 여러 개의 함수를 리턴하도록 만든다.
3. 모듈화 유리
클로저 함수를 각각의 변수에 할당하면 독립적으로 값을 사용하고 보존할 수 있다.
자바스크립트의 클로저를 예로 들면 다음과 같다.
function plus(a) {
return function(x) {
return a + x;
}
}
var plus1 = plus(3);
var plus2 = plus(5);
클로저를 만드는 두 가지 예시가 있는데 한번 확인해보자!
1. 중첩함수를 사용한다.
function outherVar() {
let i = 10;
return function innerVar(j) {
return i = i + j;
}
}
let test = outherVar();
test(5); // 15
test(7); // 17
2. 전역에 선언한 변수를 박스 안에서 함수로 정의하고 전역에서 호출
let globalVar();
{
let a = 10;
globalVar = function(x) {
return a = a + x;
}
}
globalVar(5);
globalVar(7);
결론: 클로저는 자바 스크립트 말고도 다른 프로그래밍 언어에서도 많이 사용한다.
그럼에도 불구하고 자바스크립트에서는 클로저가 많이 유명한 이유는 함수를 일반 값처럼 다룰 수 있는 자바스크립트의 그 매력 때문이지 않을까?
아래는 클로저와 관련된 사이트이다.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Closures
Closures - JavaScript | MDN
A closure is the combination of a function bundled together (enclosed) with references to its surrounding state (the lexical environment). In other words, a closure gives you access to an outer function's scope from an inner function. In JavaScript, closur
developer.mozilla.org