Closure(클로저)
설명
- 클로저는 함수와 그 함수가 선언된 렉시컬 환경의 조합
- 주요 특징으로는 내부 함수가 외부 함수의 변수에 접근할 수 있으며, 외부 함수가 반환 된 후에도 해당 접근이 유지
- 데이터 은닉, 함수 팩토리 생성, 모듈 패턴 구현 등 다양한 용도로 활용 가
예시
-
데이터 은닉 - 클로저를 사용하여 변수를 보호하고 제어된 접근을 제공
function createCounter() {
let count = 0;
return function () {
count++;
return count;
};
}
const counter = createCounter();
console.log(counter()); // 1
console.log(counter()); // 2 -
함수 팩토리 - 클로저를 사용하여 특정 상태나 동작을 "기억하는" 새로운 함수를 생성
function multiply(a, b) {
return a * b;
}
function partial(fn, a) {
return function (b) {
return fn(a, b);
};
}
const multiplyBy5 = partial(multiply, 5);
console.log(multiplyBy5(3)); // 15 -
모듈 패턴 - 클로저를 사용하여 private와 public 스코프를 구분하고, 정보 은닉을 구현
const module = (function () {
let privateVariable = 0;
function privateFunction() {
console.log("Private function");
}
return {
publicMethod: function () {
privateVariable++;
privateFunction();
},
getPrivateVariable: function () {
return privateVariable;
},
};
})();
module.publicMethod();
console.log(module.getPrivateVariable()); // 1