
JavaScript 개발을 하다 보면 const, let, var라는 키워드를 자주 만나게 됩니다. 각 키워드는 변수 선언에 사용되지만, 특징과 사용 방식이 조금씩 다릅니다. 이 글에서는 각각의 차이점과 올바른 사용법을 설명하겠습니다.
var는 JavaScript 초창기부터 사용된 변수 선언 방식입니다.
호이스팅이 되고 함수 스코프를 가지며, 재선언과 재할당이 가능합니다.
특징
호이스팅
선언만 끌어올려지고 초기화는 나중에 이루어집니다.
함수 스코프
함수 내부에서만 스코프가 제한됩니다. 블록({}) 내 선언도 함수 밖에서 접근 가능합니다.
재할당, 재선언 가능
같은 이름으로 다시 선언할 수 있어, 코드 유지보수 시 버그가 발생할 가능성이 높습니다.
예시)
var x = 10;
if (true) {
var x = 20;
}
console.log(x); // 20
var는 과거에는 주로 사용되었지만, 재선언 문제나 호이스팅 문제로 인해 유지보수에 좋지 않아, 요즘은 let과 const로 대체하는 것이 좋습니다.
ES6부터 도입된 변수 선언 키워드로, 블록 스코프와 호이스팅 시 ReferenceError를 발생시키는 특성이 있습니다. 재할당은 가능하지만 재선언은 불가능합니다.
블록 스코프
{} 블록 내에서만 유효합니다. 블록 외부에서는 접근할 수 없습니다.
호이스팅 시 ReferenceError 발생
초기화 전에는 사용이 불가능합니다.
재할당 가능, 재선언 불가
재할당은 할 수 있지만, 같은 스코프에서 같은 이름으로 다시 선언할 수 없습니다.
예시)
let y = 10;
if (true) {
let y = 20;
console.log(y); // 20
}
console.log(y); // 10 (블록 외부에는 영향을 미치지 않음)
let은 블록 스코프를 가지며, var보다 안정적입니다.
값이 변경될 가능성이 있을 때 사용하는 것이 좋습니다.
const는 let과 비슷하지만, 재할당이 불가능합니다.
변하지 않는 상수를 선언할 때 주로 사용됩니다.
블록 스코프
let과 마찬가지로 블록 스코프를 가집니다.
호이스팅 시 ReferenceError 발생
초기화 전에 사용할 수 없습니다.
재할당 불가
선언 후 값이 변경될 수 없습니다.
객체의 속성은 변경 가능
객체나 배열을 const로 선언해도, 속성이나 배열의 요소는 변경할 수 있습니다.
예시)
const z = 10;
if (true) {
const z = 20;
console.log(z); // 20
}
console.log(z); // 10
const person = { name: "John" };
person.name = "Doe"; // 가능
console.log(person); // { name: "Doe" }
const는 상수 선언 시 유용합니다.
객체와 배열의 경우에도 const를 사용하는 것이 좋습니다.
세 가지 키워드 비교 요약
