Closure란?
2024. 11. 15. 21:14ㆍ정보처리,전산/NODEJS
반응형
클로저(Closure)는 자바스크립트의 함수가 자신이 선언된 위치의 환경(Scope)을 기억하는 특성을 말한다. 이 특성 덕분에, 함수 내부에 정의된 내부 함수(Inner Function)는 외부 함수(Outer Function)의 변수와 환경에 접근할 수 있다. 외부 함수가 실행을 완료하더라도 내부 함수는 외부 함수의 변수와 환경을 유지한다.
특징
- 내부 함수는 외부 함수의 변수에 접근 가능:
- 외부 함수가 실행을 끝낸 뒤에도 내부 함수는 외부 함수의 변수와 상태를 기억한다.
- 변수의 유효 범위를 확장:
- 클로저는 함수가 호출될 때마다 독립적인 환경을 생성하므로 변수 상태를 유지하거나 보호할 수 있다.
function outerFunction(outerVariable) {
return function innerFunction(innerVariable) {
console.log('Outer Variable:', outerVariable); // 외부 함수의 변수 접근
console.log('Inner Variable:', innerVariable); // 내부 함수의 매개변수 접근
};
}
// 외부 함수 호출: 'outside'를 매개변수로 전달
const newFunction = outerFunction('outside');
// 내부 함수 호출: 'inside'를 매개변수로 전달
newFunction('inside');
Outer Variable: outside
Inner Variable: inside
작동 원리
- outerFunction이 실행되면서 outerVariable이라는 변수를 생성한다.
- innerFunction은 외부 함수인 outerFunction의 변수(outerVariable)에 접근할 수 있다.
- outerFunction이 반환한 innerFunction은 외부 함수의 실행이 끝난 뒤에도 outerVariable에 접근할 수 있는 "환경"을 기억한다.
- 결과적으로, newFunction은 outerVariable의 값을 계속 참조할 수 있다.
클로저의 장점
- 데이터 캡슐화: 외부에서 접근할 수 없는 "비공개 변수"를 만들 수 있다.
- 클로저를 이용하면 데이터를 은닉하고, 외부에서 직접 접근할 수 없도록 보호할 수 있다.
function counter() {
let count = 0; // 은닉된 변수
return function () {
count++;
console.log('Count:', count);
};
}
const increment = counter();
increment(); // Count: 1
increment(); // Count: 2
상태 유지: 함수가 호출될 때마다 독립적인 환경을 생성하여 상태를 관리할 수 있다.
주의할 점
- 클로저를 무분별하게 사용하면 메모리 누수가 발생할 수 있다.
- 클로저는 참조를 유지하기 때문에 사용이 끝난 클로저는 명시적으로 제거해야 한다.
- 성능 이슈:
- 클로저는 외부 변수를 계속 참조하므로 실행 시 약간의 성능 오버헤드가 발생할 수 있다
반응형
'정보처리,전산 > NODEJS' 카테고리의 다른 글
비동기 작업 문제 해결 방법 Callback, Promise, Async/Await. (0) | 2024.11.15 |
---|---|
비동기 작업과 Event Loop (0) | 2024.11.15 |
전역 스코프와 지역 스코프 | Closuer (0) | 2024.11.15 |
배열의 내용을 출력 (0) | 2024.11.15 |
JavaScript에서 원시 타입과 참조 타입의 메모리 할당 방식 (1) | 2024.11.15 |