JavaScript에서 변수 선언에 사용되는 var
, let
, const
는 각기 다른 특성과 동작 방식을 갖습니다. 특히 호이스팅과 스코프와 관련된 차이점이 있습니다. 이를 자세히 설명해 볼게요:
1. 변수 선언 방식
var
: ES5 이전에 변수를 선언할 때 사용되던 방식입니다.
let
: ES6(ECMAScript 2015)에서 도입된 새로운 변수 선언 방식으로, var
의 단점을 보완합니다.
const
: let
과 함께 도입된 변수 선언 방식으로, 재할당이 불가능한 상수를 선언할 때 사용합니다.
2. 호이스팅 (Hoisting)
호이스팅은 자바스크립트의 특징으로, 변수 선언과 함수 선언이 코드의 최상단으로 끌어올려지는 것처럼 동작하는 것을 의미합니다. 하지만 선언만 끌어올려지고, 초기화는 원래 위치에서 이루어집니다.
3. 스코프 (Scope)
스코프는 변수가 유효하게 사용할 수 있는 코드의 영역을 뜻합니다. 자바스크립트에서는 크게 전역 스코프, 함수 스코프, 블록 스코프로 나눌 수 있습니다.
-
var
의 스코프 (함수 스코프):
-
let
과 const
의 스코프 (블록 스코프):
-
블록 스코프 덕분에 let
과 const
는 변수를 보다 세밀하게 제어할 수 있어, var
보다 예측 가능한 코드를 작성하는 데 유리합니다.
4. 재할당 및 재선언
-
var
:
-
let
:
-
const
:
- 재선언과 재할당 모두 불가능합니다. 선언 시 반드시 초기화해야 하며, 이후 값을 변경할 수 없습니다.
-
예시:
const z = 1;
z = 2; // TypeError: Assignment to constant variable
-
다만, const
로 선언된 객체나 배열의 경우 참조값을 변경하지 않는 한 객체의 속성이나 배열의 요소는 수정할 수 있습니다.
- 예시:
const obj = { key: 1 };
obj.key = 2; // 객체의 속성 값은 변경 가능
console.log(obj); // { key: 2 }
5. 정리 및 사용 시 주의점
var
: 호이스팅과 함수 스코프 때문에 예기치 않은 동작을 유발할 수 있어 사용을 지양하는 것이 좋습니다.
let
: 블록 스코프를 가지며, 재할당이 필요할 때 유용합니다. 반복문에서 루프 변수를 선언할 때 많이 사용됩니다.
const
: 상수 값을 선언하거나, 객체나 배열 참조를 고정할 때 사용됩니다. 기본적으로 const
를 사용하고, 필요 시 let
으로 선언하는 것이 좋은 관례입니다.
위 설명을 바탕으로 var
, let
, const
의 차이점과 호이스팅, 스코프에 대해 더 깊이 이해할 수 있을 것입니다. 필요에 따라 적절한 선언 방식을 선택해 코드를 작성하면 보다 안정적이고 예측 가능한 코드를 작성할 수 있습니다.