데이터를 담는 세 가지 방법인 var, let, const의 차이점과 특징에 대해 심도 있게 알아보겠습니다.
자바스크립트의 발전 과정에 따라 변수를 선언하는 방식이 변해왔으며, 각 방식은 고유한 성격을 가지고 있습니다.
1. var (전통적인 변수 선언 방식)
ES6(2015년) 이전에 사용되던 유일한 변수 선언 방식입니다. 유연하지만 코드의 규모가 커지면 예측하기 어려운 오류를 발생시킬 위험이 큽니다.
- 함수 레벨 스코프: 오직 함수 내부에서 선언되었을 때만 지역 변수로 인정됩니다. if나 for문 안에서 선언해도 밖에서 접근이 가능합니다.
- 재선언 가능: 같은 이름의 변수를 여러 번 선언해도 에러가 나지 않아 실수로 값을 덮어쓸 수 있습니다.
- 호이스팅: 변수 선언 전에도 호출이 가능하며 undefined를 반환합니다.
JavaScript
var name = "철수";
var name = "영희"; // 재선언 가능 (위험)
if (true) {
var age = 20;
}
console.log(age); // 20 출력 (블록 밖에서도 접근 가능)
2. let (재할당이 가능한 현대적 변수)
var의 단점을 보완하기 위해 도입된 현대적인 변수 선언 방식입니다.
- 블록 레벨 스코프: 중괄호 { }로 둘러싸인 모든 코드 블록 안에서만 유효합니다.
- 재할당 가능: 저장된 값을 나중에 바꿀 수 있습니다.
- 재선언 불가능: 같은 스코프 내에서 동일한 이름을 다시 사용할 수 없어 안전합니다.
JavaScript
let score = 100;
score = 90; // 재할당 가능
// let score = 80; // 에러! 같은 이름으로 재선언 불가
if (true) {
let localScore = 50;
}
// console.log(localScore); // 에러! 블록 밖에서 접근 불가
3. const (값이 변하지 않는 상수)
한 번 할당하면 값을 절대 바꿀 수 없는 **상수(Constant)**를 선언할 때 사용합니다.
- 재할당 불가능: 처음 값을 정하면 나중에 수정할 수 없습니다. (단, 객체나 배열의 내부 요소는 수정 가능합니다.)
- 반드시 초기화 필요: 선언과 동시에 값을 넣어야 합니다.
- 블록 레벨 스코프: let과 마찬가지로 { } 안에서만 생존합니다.
JavaScript
const PI = 3.14;
// PI = 3.15; // 에러! 상수값은 재할당 불가
const student = { name: "민수" };
student.name = "지수"; // 객체 내부의 값은 바꿀 수 있음 (메모리 주소는 그대로이기 때문)
📋 var, let, const 비교표
| 특징 | var | let | const |
| 유효 범위(Scope) | 함수 레벨 스코프 | 블록 레벨 스코프 | 블록 레벨 스코프 |
| 재할당 | 가능 | 가능 | 불가능 |
| 재선언 | 가능 | 불가능 | 불가능 |
| 호이스팅 현상 | 발생 (undefined) | 발생 (에러 유도) | 발생 (에러 유도) |
| 사용 권장도 | 지양함 | 필요할 때만 사용 | 기본으로 사용 권장 |
학습 정리
- 프로그램의 안전성을 위해 기본적으로 const를 사용하는 습관을 들이세요.
- 값을 나중에 변경해야 하는 경우(예: 반복문의 카운터)에만 **let**을 사용합니다.
- **var**는 현대 자바스크립트 프로그래밍에서는 더 이상 권장되지 않습니다.
이제 상황에 맞는 적절한 변수 선언 방식을 선택할 수 있게 되었습니다!

'JavaScript' 카테고리의 다른 글
| Function Expression (0) | 2026.02.14 |
|---|---|
| Function (0) | 2026.02.14 |
| Variables scope and hoisting (0) | 2026.02.14 |
| Object (0) | 2026.02.14 |
| Built in object (0) | 2026.02.14 |