Closure 개념 정리
2025. 12. 29. 23:42ㆍReact
반응형
클로저란 무엇인가?
- 함수가 “자기가 태어난 렉시컬 환경(스코프)”를 기억해서 함수 실행이 끝난 뒤에도 그 변수를 계속 사용하는 것
렉시컬 환경이란?
- 환경 레코드(Environment Record)
- 모든 지역 변수를 프로퍼티로 저장하고 있는 객체
- this 값과 같은 기타 정보도 여기에 저장
- 외부 렉시컬 환경(Outer Lexical Environment) 에 대한 참조 – 외부 코드와 연관됨
Lexical Environment
{
Environment Record: { 변수들 }
Outer Environment Reference: 바깥 환경
}
- 함수는 자기 몸체가 정의된 위치 기준으로 환경을 기억함
- 이 정보가 함수의 내부 슬롯 [[Environment]]에 저장됨
클로저 예시 함수
function makeCounter() {
let count = 0;
return function () {
count++;
return count;
};
}
const counter = makeCounter();
- counter는 makeCounter() 가 끝나도 count 값을 계속 기억함
일반 함수 vs 클로저
일반함수
function counter() {
let count = 0;
count++;
return count;
}
counter(); // 1
counter(); // 1
호출 → 환경 생성 → 실행 → 종료 → 환경 파괴
왜 항상 1인가?
- 호출할 때마다 새 렉시컬 환경 생성
- count = 0 매번 다시 생성
- 함수 끝나면 환경 즉시 소멸
클로저
function makeCounter() {
let count = 0;
return function () {
count++;
return count;
};
}
const counter = makeCounter();
counter(); // 1
counter(); // 2
counter(); // 3
makeCounter 실행
→ 렉시컬 환경 생성
→ 내부 함수가 [[Environment]]로 참조
→ makeCounter 종료
→ 환경 유지됨
왜 누적되는가?
- count는 makeCounter의 렉시컬 환경에 있음
- 내부 함수가 그 환경을 참조
- 참조가 살아있는 동안 환경 소멸 ❌
- counter = null; // ← 이 순간 GC 대상
“중첩 함수면 다 클로저냐?”
function outer() {
let x = 0;
function inner() {
x++;
}
inner();
}
클로저 아님
- inner가 밖으로 안 나감
- outer 끝나면 전부 소멸
클로저가 성립하는 정확한 조건
- 함수 안에서 함수 만들어지고
- 내부 함수가 외부 변수를 참조하고
- 그 내부 함수가 살아남을 때
질문
counter = makeCounter();
counter2 = makeCounter();
각각 독립적인 참조를 가질 것인가?
- 각 변수는 새 렉시컬 환경을 할당 받아 사용함
- 함수 코드 내용은 같아도
- 참조하는 렉시컬 환경은 다르다
- 호출될 때마다 환경은 새로 만들어짐
언제 같은 참조가 되냐면?
const counter = makeCounter();
const counter2 = counter;
counter → function → count
counter2 ↗
- 같은 함수 객체를 가리키는 것이라 count 공유됨
반응형
'React' 카테고리의 다른 글
| REACT - SPA (Single Page Application)이란? (0) | 2026.01.07 |
|---|---|
| React 상태 관리 전략: Props와 Store의 선택 기준 (0) | 2025.12.29 |
| React 공식 문서 정리 - UI 표현하기 (0) | 2025.11.24 |
| React 파이버 아키텍처 분석 (0) | 2025.11.24 |
| React 공식 문서 정리 - UI 표현하기 (0) | 2025.11.24 |