TDZ (Temporal Dead Zone)

728x90

TDZ (Temporal Dead Zone) 개념 정리

배경

JavaScript에서 letconstvar와 다르게
선언 이전에 접근할 경우 에러가 발생한다.
이 동작의 핵심 원인이 TDZ(Temporal Dead Zone) 이다.

핵심 질문

  • TDZ란 무엇인가?
  • let / const는 선언 전에 접근하면 에러가 나는가?
  • TDZ는 어떤 문제를 방지하기 위해 존재하는가?

논의 요약

TDZ의 정의

TDZ(Temporal Dead Zone)
let 또는 const로 선언된 변수가

스코프에는 이미 존재하지만, 선언문이 실행되기 전까지 접근이 금지되는 구간

을 의미한다.

  • 선언은 호이스팅됨
  • 초기화는 선언 시점까지 지연됨
  • 이 “지연 구간”이 TDZ

JavaScript 실행 흐름 관점

  1. 실행 컨텍스트 생성
    • 스코프 결정
    • 변수 선언 등록 (호이스팅)
  2. 코드 실행
    • 선언문 도달 시 초기화 수행
    • 이 시점에서 TDZ 종료

var와의 차이

  • var
    • 선언 + 초기화(undefined)가 동시에 처리
    • TDZ 없음
    • 선언 전 접근 가능 (undefined)
  • let / const
    • 선언만 먼저 처리
    • 초기화 전 접근 차단 (TDZ 존재)
    • 선언 전 접근 시 ReferenceError

const의 특징

  • const는 선언과 동시에 초기화가 필수
  • TDZ를 벗어나는 순간 반드시 값이 할당되어야 함
  • 초기화 누락 시 문법 오류 발생

TDZ의 설계 의도

TDZ는 JavaScript의 안정성과 명확성을 높이기 위한 의도적 제약이다.

  • 선언 이전 변수 사용 방지
  • 코드 실행 순서에 의존하는 버그 제거
  • 가독성과 유지보수성 향상
  • 오류를 런타임 초기가 아닌 즉시 노출

결정 사항

  • let / const호이스팅은 된다
  • 단, TDZ로 인해 선언 전 접근이 금지된다
  • let은 호이스팅되지 않는다”는 표현은 부정확하다
728x90