클로저는 주변 상태에 대한 참조와 함께 묶인 기능의 조합
클로저(Closures)
는 함수와 그 외부를 둘러싸고 있는 렉시컬환경의 조합이다.
즉 내부함수에서 외부함수에 있는 상태에 접근할 수 있는 권한을 주는 것을 뜻한다.
기본적으로 내부함수는 외부함수 정보에 접근 가능하다.
function outer() {
const x = 0;
function inner() {
console.log(`inside inner: ${x}`);
}
inner();
}
outer(); // inside inner: 0
이 때 만약 내부함수가 외부함수를 참조한 함수를 return
하면 참조하고 있는 렉시컬환경도 같이 반환된다.
function outer() {
const x = 0;
function inner() {
console.log(`inside inner: ${x}`);
}
return inner;
}
const func1 = outer();
func1(); // inside inner: 0
클러저는 내부 정보를 은닉하고, 공개 함수(Public, 외부)
를 통한 데이터 조작을 위해 사용된다.
이를 캡슐화
또는 정보은닉
이라고 한다.
클래스는 private
필드 또는 메소드를 사용하여 캡슐화
, 정보은닉
을 구현한다.
// count변수는 외부에서 접근 X
// 오로지 increase를 통해서만 접근
function makeCounter() {
let count = 0;
function increase() {
count++;
console.log(count);
}
return increase;
}
const increase = makeCounter();
increase(); // 1
increase(); // 2
increase(); // 3
Closures - JavaScript | MDN - Mozilla
모던 자바스크립트 Deep Dive
모던 JavaScript 튜토리얼