F-Lab
🚀
상위권 IT회사 합격 이력서 무료로 모아보기

자바스크립트의 호이스팅과 TDZ(Temporal Dead Zone) 이해하기

writer_thumbnail

F-Lab : 상위 1% 개발자들의 멘토링

AI가 제공하는 얕고 넓은 지식을 위한 짤막한 글입니다!



호이스팅이란 무엇인가?

자바스크립트에서 호이스팅(Hoisting)은 변수와 함수 선언이 코드의 실행 전에 해당 스코프의 최상단으로 끌어올려지는 현상을 말합니다. 이는 자바스크립트 엔진이 코드를 실행하기 전에 변수와 함수 선언을 먼저 처리하기 때문입니다.

예를 들어, 아래 코드를 보겠습니다:

console.log(a); // undefined
var a = 5;

위 코드에서 변수 a는 선언이 코드의 최상단으로 끌어올려지기 때문에 undefined로 초기화됩니다. 하지만 값 할당은 호이스팅되지 않기 때문에 undefined가 출력됩니다.

왜냐하면 자바스크립트 엔진이 실행 전에 변수 선언을 스코프의 최상단으로 이동시키기 때문입니다.

이러한 호이스팅은 함수 선언에도 적용됩니다. 함수 선언은 변수 선언과 달리 전체 함수가 호이스팅되므로, 함수 호출이 선언 이전에 이루어져도 문제가 없습니다.



TDZ(Temporal Dead Zone)와 let/const

ES6에서 도입된 letconst는 TDZ(Temporal Dead Zone)이라는 개념을 가지고 있습니다. TDZ는 변수가 선언되기 전까지 접근할 수 없는 영역을 의미합니다.

아래 코드를 보겠습니다:

console.log(b); // ReferenceError
let b = 10;

위 코드에서 b는 선언되기 전에 접근하려고 하면 ReferenceError가 발생합니다. 이는 letconst가 TDZ에 의해 보호되기 때문입니다.

왜냐하면 TDZ는 변수가 선언되기 전까지 접근을 차단하여, 개발자가 의도치 않은 오류를 방지할 수 있도록 돕기 때문입니다.

따라서 letconst를 사용할 때는 항상 변수를 선언한 후에 접근해야 합니다.



var, let, const의 차이점

var, let, const는 모두 변수를 선언하는 데 사용되지만, 동작 방식에 차이가 있습니다.

var: 함수 스코프를 가지며, 호이스팅 시 undefined로 초기화됩니다. TDZ가 없기 때문에 선언 전에 접근이 가능합니다.

let: 블록 스코프를 가지며, TDZ가 적용됩니다. 선언 전에 접근하려고 하면 ReferenceError가 발생합니다.

const: let과 동일한 특성을 가지지만, 선언과 동시에 초기화가 필요하며, 재할당이 불가능합니다.

왜냐하면 letconst는 ES6에서 추가된 키워드로, 보다 안전하고 예측 가능한 코드를 작성할 수 있도록 설계되었기 때문입니다.

아래는 세 가지 키워드의 차이를 보여주는 예제입니다:

var x = 1;
let y = 2;
const z = 3;

x = 10; // 가능
y = 20; // 가능
z = 30; // TypeError


호이스팅과 TDZ의 실제 활용

호이스팅과 TDZ를 이해하면 코드의 동작 방식을 보다 명확히 이해할 수 있습니다. 예를 들어, 함수 선언과 표현식의 차이를 이해하는 데 도움이 됩니다.

아래 코드를 보겠습니다:

console.log(foo()); // 'Hello'
function foo() {
    return 'Hello';
}

console.log(bar()); // TypeError
const bar = function() {
    return 'World';
};

위 코드에서 foo는 함수 선언이므로 호이스팅되어 정상적으로 호출됩니다. 반면, bar는 함수 표현식이므로 TDZ에 의해 호출 전에 접근할 수 없습니다.

왜냐하면 함수 선언은 전체 함수가 호이스팅되지만, 함수 표현식은 변수 선언만 호이스팅되기 때문입니다.

따라서 함수 선언과 표현식을 적절히 사용하여 코드의 가독성과 안정성을 높일 수 있습니다.



결론: 호이스팅과 TDZ의 중요성

호이스팅과 TDZ는 자바스크립트의 중요한 개념으로, 이를 이해하면 코드의 동작 방식을 보다 명확히 이해할 수 있습니다.

호이스팅은 변수와 함수 선언을 코드의 최상단으로 끌어올리는 동작을 의미하며, TDZ는 letconst가 선언되기 전까지 접근을 차단하는 영역을 말합니다.

왜냐하면 이러한 개념들은 코드의 안정성과 예측 가능성을 높이는 데 기여하기 때문입니다.

따라서 개발자는 호이스팅과 TDZ를 이해하고, 이를 활용하여 보다 안전하고 효율적인 코드를 작성해야 합니다.

이 글을 통해 호이스팅과 TDZ의 개념을 명확히 이해하고, 실제 코드에 적용할 수 있기를 바랍니다.

ⓒ F-Lab & Company

이 컨텐츠는 F-Lab의 고유 자산으로 상업적인 목적의 복사 및 배포를 금합니다.

조회수
logo
copyright © F-Lab & Company 2025