JavaScript 호이스팅: 주니어 개발자를 위한 상세 가이드

MicaelKnife·2024년 8월 12일

JavaScript

목록 보기
7/19
post-thumbnail

들어가며: 코드의 마법, 호이스팅

여러분은 JavaScript에서 선언하기도 전에 변수를 사용할 수 있다는 사실을 알고 계셨나요? 아니면 함수를 코드의 맨 아래에 정의해도 맨 위에서 호출할 수 있다는 것은요? 이런 마법 같은 일이 어떻게 가능한 걸까요? 바로 '호이스팅(Hoisting)'이라는 JavaScript의 독특한 특성 때문입니다.

호이스팅은 많은 주니어 개발자들이 처음 접했을 때 혼란스러워하는 개념 중 하나입니다. 하지만 걱정 마세요! 이 글을 통해 호이스팅의 모든 것을 파헤쳐 볼 테니까요. 자, 이제 JavaScript의 비밀 세계로 함께 떠나볼까요?

목차

  1. 호이스팅이란 무엇인가?
  2. 변수 호이스팅: var, let, const의 차이
  3. 함수 호이스팅: 선언문 vs 표현식
  4. 호이스팅의 실제 동작 원리
  5. 호이스팅 관련 주의사항 및 best practices
  6. 마치며: 호이스팅 마스터하기

호이스팅이란 무엇인가?

호이스팅(Hoisting)은 JavaScript에서 변수와 함수 선언이 그들이 포함된 스코프의 최상단으로 '끌어올려지는' 것처럼 동작하는 특성을 말합니다. 이는 코드가 실행되기 전에 JavaScript 엔진에 의해 처리되는 과정입니다.

예를 들어 보겠습니다:

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

이 코드는 에러를 발생시키지 않고 undefined를 출력합니다. 왜 그럴까요? 호이스팅 때문입니다!

변수 호이스팅: var, let, const의 차이

var의 호이스팅

var로 선언된 변수는 선언과 초기화가 분리되어 호이스팅됩니다.

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

이 코드는 내부적으로 다음과 같이 해석됩니다:

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

let과 const의 호이스팅

letconst도 호이스팅되지만, '일시적 사각지대(Temporal Dead Zone, TDZ)'라는 개념이 적용됩니다.

console.log(y); // ReferenceError: y is not defined
let y = 10;

letconst는 선언은 호이스팅되지만, 초기화는 원래 위치에서 이뤄집니다. 따라서 선언 전에 접근하면 에러가 발생합니다.

함수 호이스팅: 선언문 vs 표현식

함수 선언문

함수 선언문은 전체가 호이스팅됩니다.

sayHello(); // "Hello!"

function sayHello() {
    console.log("Hello!");
}

함수 표현식

함수 표현식은 변수 선언만 호이스팅됩니다.

sayHi(); // TypeError: sayHi is not a function

var sayHi = function() {
    console.log("Hi!");
};

호이스팅의 실제 동작 원리

호이스팅은 코드가 물리적으로 위로 옮겨지는 것이 아닙니다. 실제로는 컴파일 단계에서 메모리에 변수와 함수를 위한 공간을 미리 할당하는 것입니다.

  1. 변수 선언 (메모리 공간 확보)
  2. 함수 선언 (메모리 공간 확보 및 함수 바디 저장)
  3. 코드 실행

호이스팅 관련 주의사항 및 best practices

  1. var 대신 letconst 사용하기
  2. 함수 선언문보다는 함수 표현식 사용하기
  3. 변수와 함수는 사용하기 전에 선언하기
  4. 전역 스코프에서의 선언을 최소화하기

마치며: 호이스팅 마스터하기

호이스팅은 처음에는 복잡해 보일 수 있지만, 이해하고 나면 JavaScript의 강력한 도구가 될 수 있습니다. 이 개념을 잘 이해하면 예상치 못한 버그를 방지하고, 더 깔끔하고 효율적인 코드를 작성할 수 있습니다.

지금까지 배운 내용을 실제 코딩에 적용해 보세요. 그리고 기억하세요, 모든 개발자가 처음에는 주니어였답니다. 끊임없는 학습과 실천으로 여러분도 곧 JavaScript 마스터가 될 수 있을 거예요!

행운을 빕니다, 그리고 즐거운 코딩 되세요! 🚀

profile
천천히, 페이스 유지하는 개발자

0개의 댓글