클로저는 자바스크립트의 매우 중요한 개념이며, 다른 많은 프로그래밍 언어에서도 발견되는 개념이다. 클로저를 이해하면 코드의 동작 방식을 더 잘 이해할 수 있고, 많은 문제를 해결하는 데 도움이 된다.
클로저(Closure)는 함수와 함수가 선언된 어휘적 환경의 조합이다. 간단히 말하면, 함수가 자신이 생성됐을 때의 환경을 '기억'하는 것이다. ⇒ 내부함수가 외부함수 변수에 접근 가능
예를 들어:
function outer() {
let outerVar = '외부 변수';
function inner() {
console.log(outerVar); // '외부 변수'
}
return inner;
}
const myInner = outer(); //=>inner 함수를 반환! 자신이 생성됐을 때의 환경을 기억!
myInner(); //=>inner 함수를 호출 출력:'외부 변수'
여기서 myInner
는 outer
함수의 내부 함수 inner
에 대한 참조를 가지고 있으며, outerVar
에도 접근할 수 있다. 이런 방식으로 클로저는 상태를 저장하고 관리할 수 있다. 그냥 outer();
로 호출하면 inner
함수를 반환하긴 하지만, 그 반환된 inner
함수를 호출하지 않으니까 아무 일도 일어나지 않는다.
클로저의 중요한 사용 방법 중 하나는 데이터 은닉화다. 클로저를 사용하면 특정 범위 외부에서는 접근할 수 없는 변수를 만들 수 있다. 이는 객체 지향 프로그래밍의 캡슐화 개념과 유사하다.
function createCounter() {
let count = 0;
return {
increment: function() {
count++;
},
decrement: function() {
count--;
},
getCount: function() {
return count;
}
};
}
const counter = createCounter();
counter.increment();
console.log(counter.getCount()); // 1
위의 예에서 count
변수는 createCounter
함수의 내부에서만 접근할 수 있으며, 외부에서는 접근할 수 없다. 이로써 클로저를 통해 변수의 접근을 제어하고, 코드의 안정성과 유지 보수성을 향상시킬 수 있다.
클로저는 함수가 선언될 때의 환경을 기억하게 해주며, 이를 통해 변수를 은닉하거나 상태를 유지하는 등의 복잡한 작업을 수행할 수 있다. 클로저는 자바스크립트 코드를 작성하고 이해하는 데 있어 핵심적인 개념이므로, 충분히 이해하고 활용하는 것이 중요하다.