[typescript] 명시적인 변수 선언과 호이스팅 간의 관계는 어떻게 되나요?

호이스팅(Hoisting)은 JavaScript 및 TypeScript에서 변수 및 함수 선언을 해당 스코프의 상단으로 끌어올리는 동작을 가리킵니다. 이는 변수 및 함수를 선언하기 이전에 참조할 수 있게 됩니다. 그러나 실제 할당은 호이스팅과는 별도로 처리됩니다.

명시적인 변수 선언과 호이스팅은 관련성이 없는 개념입니다. 변수 선언의 타입 명시 여부는 호이스팅에 영향을 주지 않습니다. 따라서 TypeScript에서 변수의 타입을 명시적으로 지정하더라도 호이스팅 규칙은 여전히 적용됩니다.

예를 들어, 다음 TypeScript 코드를 살펴보겠습니다.

console.log(name); // undefined
var name: string = "John Doe";

이 코드는 호이스팅에 의해 다음과 같이 해석됩니다.

var name;
console.log(name);
name = "John Doe";

변수 name은 호이스팅에 의해 선언부가 상단으로 이동하지만 실제 할당은 그대로 남아 있습니다. 이런 이유로 console.log()에서 name의 값은 undefined로 출력됩니다. 호이스팅은 변수 선언을 상단으로 끌어올리지만 초기화나 할당은 그 위치에 그대로 남게 됩니다.

따라서, TypeScript에서 명시적인 변수 타입 선언과 호이스팅은 각각 변수의 타입을 명시하고, 변수와 함수 선언을 스코프 상단으로 끌어올릴 뿐, 서로 관련된 개념이 아닙니다.