반응형
클로저(Closure)란?
“클로저는 함수가 외부의 변수에 접근할 수 있는 기능”이다.
즉, 내부 함수가 외부 함수의 변수에 접근하고 기억하는 것이 클로저이다.
예제 코드로 살펴보기 🔍
function outer() {
let count = 0; // 외부 함수의 지역 변수
return function inner() {
count++;
console.log(`현재 count는 ${count}입니다.`);
};
}
const counter = outer(); // outer는 실행되고, inner가 반환됨
counter(); // 현재 count는 1입니다.
counter(); // 현재 count는 2입니다.
겉으로만 봤을 때는 counter를 실행하면 count가 각각 1, 1로 출력될 것 같지만 실제로는 아니다.
outer() 함수는 실행되고 사라졌지만,그 안에서 만든 inner() 함수는 count를 기억하고 있다.
왜냐하면 count가 클로저에 포함되어서 메모리에 살아있기 때문이다.
클로저의 핵심 구성
구성 요소 | 설명 |
외부 함수 (outer) | 지역 변수를 선언하는 함수 |
내부 함수 (inner) | 외부 함수의 지역 변수에 접근하는 함수 |
반환 | 내부 함수가 외부로 반환되어 사용됨 |
기억 | 외부 함수의 지역 변수를 내부 함수가 기억 (→ 클로저) |
그렇다면 클로저를 왜 쓰는걸까?
1. 데이터 보호 / 은닉 (캡슐화): 외부에서 직접 접근 못하게 하고, 함수로만 조작하도록 할 수 있음.
function createCounter() {
let count = 0;
return {
increment() { count++; return count; },
decrement() { count--; return count; },
};
}
const counter = createCounter();
counter.increment(); // 1
counter.decrement(); // 0
// count에 직접 접근은 불가능
2. 상태 유지: 클로저를 사용하면 상태를 기억하게 할 수 있음.
3. 콜백, 이벤트 핸들러: 비동기 처리에서도 클로저가 유용하게 쓰임.
[주의할 점]
1) 메모리 누수: 클로저로 인해 변수가 해제되지 않고 남아있으면 메모리 낭비가 발생할 수 있다.
2) 남용 주의: 모든 함수에 클로저를 만들 필요는 없고, 필요한 상황에서만 쓰는 게 좋다.
요약
1) 클로저는 내부 함수가 외부 함수의 변수에 접근할 수 있게 해주는 기능
2) 함수가 자신이 만들어질 때의 환경을 기억함
3) 상태 유지, 캡슐화, 비동기 처리 등에 매우 유용
4) 하지만 메모리 관리에는 주의해야 함
반응형
'공부 > JavaScript' 카테고리의 다른 글
[JS] 다양한 메서드 알아보기 🔍 (0) | 2025.04.28 |
---|---|
[JS] var, let, const 비교해보기! (Feat. 호이스팅) (0) | 2025.04.23 |
[JS] .js와 .jsx의 차이점 알아보기 (0) | 2025.04.17 |
[JS] 동기와 비동기란? (Feat. 콜백, Promise, async/await) (0) | 2025.04.13 |
[JS] Number()와 parseInt()의 차이점 - feat. parseFloat() (0) | 2025.03.11 |