var, let, const 차이
JAVASCRIPT
해당 포스팅에서는 var, let, const 차이에 대해 다룹니다. 꽤 많이 길기에 오른쪽에 있는 목차를 활용해 주세요.
JAVASCRIPT
- 자바스크립트 장단점
- 데이터 타입
- 데이터 형 변환
- 불변성을 유지하려면 어떻게..
- 프로토타입
- var, let, const 차이 ✔️
- 호이스팅(Hoisting)
- es6 문법 특징과 차이
- this
- 제이쿼리 메서드 중 attr(), prop() 차이
- 화살표 함수와 일반 함수 차이
- 스코프(scope)
- 객체 지향
- 클로저(closure)
- 타입스크립트
- 프로세스
- 스레드, 싱글 스레드
- 콜백 함수 / 재귀 함수 차이
- 콜백 지옥, 콜백 지옥을 해결하는 방법
- promise / 콜백 지옥
- ajax
- 함수 선언식/ 표현식 차이
- 이벤트 버블링 / 이벤트 캡처 예시
- 이벤트 위임 (Event Delegation)
- 렉시컬 환경
- 프로퍼티
- stack이 코드 실행할 때 queue에 미뤄두는 것
- 얕은 복사 / 깊은 복사
- 동기 / 비동기
변수 선언 방식
변수 선언 방식의 기본 개념
var
var
는 ES6 이전에 자바스크립트에서 변수를 선언하는 유일한 방법이었습니다. 함수 스코프(function scope)를 가지며, 함수 내부에서 선언된 변수는 함수 전체에서 접근할 수 있습니다. 또한, 호이스팅(hoisting)이라는 특징이 있어, 선언 부분이 코드의 최상단으로 끌어올려진 것처럼 동작합니다.let
let
은 ES6에서 도입된 변수 선언 방식으로, 블록 스코프(block scope)를 가집니다. 이는 변수가 선언된 블록 내에서만 유효하며, 호이스팅은 되지만 초기화는 선언된 위치에서 이루어집니다.const
const
또한 ES6에서 도입된 변수 선언 방식으로,let
과 동일하게 블록 스코프를 가집니다.const
로 선언된 변수는 상수로 취급되며, 선언과 동시에 초기화되어야 하며 이후에 값을 변경할 수 없습니다. 하지만 객체나 배열과 같은 참조 타입의 경우, 참조 자체는 불변이지만 내부 값은 변경할 수 있습니다.
변수 선언 방식의 사용 예시
var의 사용 예시
var
로 변수를 선언하면 함수 스코프를 가지며, 호이스팅이 발생합니다. 이는 아래 예제에서var
로 선언된i
가 for문 바깥에서도 접근 가능하며, 선언 전에 호출해도undefined
로 평가되는 것을 확인할 수 있습니다.
1
2
3
4
5
6
7
8
9
10
11
12
console.log(x); // undefined
var x = 5;
function example() {
var y = 10;
if (true) {
var z = 20;
}
console.log(z); // 20 (함수 스코프)
}
example();
console.log(y); // ReferenceError: y is not defined
let의 사용 예시
let
로 변수를 선언하면 블록 스코프를 가지며, 호이스팅은 되지만 초기화는 선언된 위치에서 이루어집니다. 이는 아래 예제에서let
로 선언된i
가 for문 바깥에서는 접근할 수 없고, 선언 전에 호출하면 ReferenceError가 발생하는 것을 확인할 수 있습니다.
1
2
3
4
5
6
7
8
9
10
11
12
console.log(a); // ReferenceError: a is not defined
let a = 5;
function example() {
let b = 10;
if (true) {
let c = 20;
}
console.log(c); // ReferenceError: c is not defined
}
example();
console.log(b); // ReferenceError: b is not defined
const의 사용 예시
const
로 변수를 선언하면 블록 스코프를 가지며, 선언과 동시에 초기화되어야 하고 이후에 값을 변경할 수 없습니다. 이는 아래 예제에서const
로 선언된d
가 재할당 시 오류를 발생시키는 것을 확인할 수 있습니다.
1
2
3
4
5
6
7
8
9
10
const d = 5;
d = 10; // TypeError: Assignment to constant variable.
const obj = { name: 'John' };
obj.name = 'Doe'; // 가능 (객체 내부 값은 변경 가능)
console.log(obj.name); // Doe
const arr = [1, 2, 3];
arr.push(4); // 가능 (배열 내부 값은 변경 가능)
console.log(arr); // [1, 2, 3, 4]
변수 선언 방식의 특징 및 차이점
스코프
var
는 함수 스코프를 가지며,let
과const
는 블록 스코프를 가집니다. 이는 변수가 어디서 접근 가능한지를 결정짓는 중요한 특징입니다.호이스팅
var
는 호이스팅되어 변수 선언이 코드의 최상단으로 끌어올려진 것처럼 동작합니다.let
과const
도 호이스팅되지만, 초기화는 변수 선언 위치에서 이루어집니다. 따라서 선언 전에 변수를 사용하려고 하면 ReferenceError가 발생합니다.재할당 가능 여부
var
와let
은 재할당이 가능하지만,const
는 재할당이 불가능합니다.const
로 선언된 변수는 상수로 취급되며, 선언과 동시에 초기화되어야 합니다. 하지만 객체나 배열과 같은 참조 타입의 경우, 내부 값은 변경할 수 있습니다.
자바스크립트의 변수 선언 방식에 대한 이해는 코드의 가독성과 유지보수성을 높이는 데 매우 중요합니다.