실행 컨텍스트란 무엇인가?
실행 컨텍스트는 JavaScript 코드가 실행되는 환경을 관리하는 추상적인 개념입니다. 마치 연극의 무대와 같이, 코드가 실행될 때 필요한 모든 정보를 담고 있는 특별한 공간이라고 생각하면 됩니다.
실행 컨텍스트의 세 가지 주요 구성 요소
- Variable Environment (변수 환경)
- 함수 내부의 변수, 함수 선언, 매개변수를 저장
- 코드에서 선언된 변수들의 메모리 공간
- Lexical Environment (어휘적 환경)
- 현재 컨텍스트의 식별자(변수, 함수) 정보
- 외부 환경에 대한 참조 포함
- This Binding (this 바인딩)
- 현재 실행 컨텍스트에서 this 키워드의 값 결정
실행 컨텍스트의 생성 과정
1. 생성 단계 (Creation Phase)
function exampleFunction(a) {
var b = 10;
function innerFunction() {
console.log(a + b);
}
return innerFunction;
}
let closure = exampleFunction(5);
이 예제에서 exampleFunction이 호출되면 다음과 같은 일이 발생합니다:
- 매개변수 a의 값 (5) 저장
- 변수 b를 undefined로 초기화
- 내부 함수 innerFunction 생성
- 스코프 체인 설정
2. 실행 단계 (Execution Phase)
실제 코드 실행:
- 변수 b에 10 할당
- 함수 반환
실행 컨텍스트의 종류
전역 실행 컨텍스트
- 코드 실행 시 가장 먼저 생성
- 전역 객체(window in 브라우저, global in Node.js) 관리
함수 실행 컨텍스트
- 함수가 호출될 때마다 새로 생성
- 해당 함수만의 고유한 실행 환경 제공
블록 실행 컨텍스트 (ES6+)
- let, const로 선언된 변수의 범위 관리
실행 컨텍스트 스택 (Call Stack)
function first() {
second();
console.log('First function');
}
function second() {
third();
console.log('Second function');
}
function third() {
console.log('Third function');
}
first();
실행 순서:
- 전역 실행 컨텍스트 생성
- first() 호출 → first 컨텍스트 스택에 추가
- second() 호출 → second 컨텍스트 스택에 추가
- third() 호출 → third 컨텍스트 스택에 추가
- 역순으로 실행 및 컨텍스트 제거
Third function
Second function
First function
클로저와 실행 컨텍스트
function outerFunction(x) {
let y = 10;
function innerFunction() {
console.log(x + y);
}
return innerFunction;
}
let closure = outerFunction(5);
closure(); // 15 출력
클로저는 실행 컨텍스트의 어휘적 환경을 "기억"하는 함수입니다. outerFunction의 실행 컨텍스트가 종료된 후에도 x와 y에 접근할 수 있습니다.
주의할 점
- 실행 컨텍스트는 메모리를 소비합니다
- 과도한 중첩 함수나 클로저는 메모리 누수를 야기할 수 있음
- 성능에 영향을 줄 수 있으므로 신중하게 사용해야 함
결론
실행 컨텍스트는 JavaScript의 핵심 메커니즘으로, 코드 실행의 "무대 뒤"에서 일어나는 복잡한 과정을 관리합니다. 이를 이해하면 JavaScript의 작동 원리를 더 깊이 이해할 수 있습니다.
728x90
'1일 1CS(Computer Science)' 카테고리의 다른 글
리액트의 Props와 State (0) | 2025.04.03 |
---|---|
이벤트 루프에 대해서 설명해주세요. (0) | 2025.03.28 |
TanStack Query: staleTime과 gcTime (0) | 2025.03.27 |
reflow와 repaint의 차이점과 최적화 방법 (1) | 2025.03.26 |
[★중요★]클로저 함수란? (0) | 2025.03.24 |