Hoisting

Hoisting이란?
javascript에서 Hoisting(호이스팅)은 변수나 함수 선언을 코드의 최상단으로 끌어올리는 것처럼 동작하는 특성을 말합니다.
끌어올리는 코드: 변수나 함수 선언 코드
끌어올리지 않는 코드: 초기화 코드
// 코드
console.log(number); // undefined
var number = 5; // 선언 & 초기화
console.log(number); // 5
===================================
// 내부 처리
var number; // 선언
console.log(number); // undefined(초기화 전)
number = 5; // 초기화
console.log(number); // 5
let과 const 변수로 선언 및 초기화
// 코드
console.log(number2); //ReferenceError
let number2 = 10 // 선언 & 초기화
console.log(number2); // 10
=========================
// 내부 처리
let number2;
console.log(number2); // ReferenceError
- let과 const로 선언된 변수도 호이스팅이 가능합니다.
하지만 “일시적 사각지대(TDZ, Temporal Dead Zone)” 때문에 초기화 전에 접근하면 ReferenceError가 발생합니다.
var 변수는 호이스팅 시 초기화가 함께 이루어지기 때문에 TDZ가 없습니다.
함수 선언문과 함수 표현식
// 함수 선언문
eat();
function eat() {
console.log("잘 먹겠습니다.");
}
// 함수 표현식
eatExpression(); // TypeError
var eatExpression = function() {
console.log("잘 먹겠습니다.");
};
함수 선언문은 호이스팅 시 전체 함수가 메모리에 올라가므로 선언 이전에도 호출이 가능합니다.
함수 표현식은 변수에 함수를 할당하는 방식이기 때문에 변수의 호이스팅 규칙을 따릅니다.
Q] Hoisting in JAVA(?)
Java에서 변수 선언 순서
public class VariableTest {
public static void main(String[] args) {
System.out.printlnt(number); // number선언 X -> Error
}
}
변수 선언 순서는 변수가 사용되기 전에 해당 변수가 이미 선언되어 있어야 합니다.
사용하기 전에 변수를 선언하지 않으면 컴파일 오류를 발생시킵니다.(변수 선언 순서 중요합니다.)
Java에서 메소드 선언 순서
public class MethodTest {
public static void main(String[] args) {
sayHelloWorld();
}
public static void sayHelloWorld() {
System.out.println("Hello World!");
}
}
메소드의 호출을 위해 해당 메소드의 선언 위치에 제한을 두지 않습니다.
Java Compiler가 전체 소스 코드를 분석하고 메소드 시그니처를 확인하여 호출 대상 Method를 식별하기 떄문입니다.
Compiler는 메소드 시그니처를 기반으로 호출 대상 Method를 찾아내고, 런타임 환경에서 해당 메소드를 실행합니다.
A] 아니요!
자바에서 메소드는 시그니처 기반으로 검색하는 방식을 통해 호출이 선언보다 먼저 작성되어도 해당 메소드를 실행할 수 있습니다.
Hoisting 개념이 적용되지 않습니다.
요약
자바스크립트
변수 선언 코드보다 참조하는 코드를 먼저 작성하면 Hoisting이 적용됩니다.
let, const와 같은 키워드를 사용하여 선언을 해도 Hoisting이 적용되지만 초기화는 Hoisting이 적용되지 않아 TDZ가 발생할 수 있습니다.
Java
변수 선언과 참조의 순서는 중요합니다. 따라서 참조가 선언보다 먼저 작성된 경우 컴파일 에러가 발생합니다.
메소드의 경우 Hoisting이 아니라 시그니처 기반으로 검색하여 선언과 호출의 순서에 상관없이 해당 메소드가 실행 될 수 있습니다.
Subscribe to my newsletter
Read articles from 신인수 directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
