Let과 Const의 등장과 Var
Let과 Const는 ES6(ES2015)에 추가된 기능으로 변수 선언에 사용된다. 당연하게도 ES6 이전에는 Var이 사용되었는데, Var의 존재에도 불구하고 Let과 Const가 등장한 이유에는 Var가 가지고 있는 몇가지 문제점 때문이었다.
Var의 특징과 문제점은 무엇일까?
Var의 범위는 전역 혹은 함수 범위로 지정된다. 즉, 함수 외부에서 선언되면 전역 범위에서 사용할 수 있으며, 함수 내부에서 선언되면 함수 내부에서만 사용할 수 있다.
예제 코드를 통해 좀더 쉽게 확인할 수 있다.
var hello = "hello";
function world() {
var world = "world";
}
console.log(hello); // hello가 출력된다.
console.log(world); //함수 범위이기 때문에 world를 가져오는 것은 불가능하다
hello의 범위는 전역이기 때문에 출력하였을 때 아무런 문제 없이 출력할 수 있다.
반면에 world의 범위는 함수이기 때문에 함수를 벗어나서 출력 할 수 없다.
또한 Var는 중복 선언이 가능하다.
사실 이점에서 문제가 발생하게 된다.
예제를 통해 확인하자.
var name = 'hello';
console.log(name); // hello
var name = 'world';
console.log(name); // world
var는 중복 선언이 가능하기 때문에 최종적으로 선언한 값이 반영되어 출력이 된다. 즉, name으로 무한정 선언하여 출력을 한다고 가정하면 name의 무한대 번째에서 선언한 코드가 출력되게 된다. 따라서, 내가 이미 선언한 다른 코드들을 파악하기 어려우며 코드량이 많아졌을 경우에 같은 이름의 코드들이 여러번 선언되었다면 추후에 발생한 에러가 어디에서 비롯된 것인지 파악하기가 매우 어렵다.
Let과 Const의 등장과 쓰임
이러한 Var의 치명적인 단점을 보완하기 위해 등장한 것이 Let과 Const이다.
우선 Let과 Const의 특징을 간략하게 설명하자면 다음과 같다.
- Let: 중복 선언 가능, 재할당 불가능
- Const: 중복 선언 불가능, 재할당 불가능
위 특징으로 예제와 같이 Let 을 활용할 수 있다.
let name = 'hello';
console.log(name); // hello
name = 'world';
console.log(name); // world
// let name = 'world'; 는 불가능함
따라서 Let은 name을 선언 및 초기화 한 이후 재할당을 통해서 바꿔줄 수 있다.
반면에 Const는 상수로 활용된다.
let name = 'hello';
console.log(name); // hello
name = 'world';
console.log(name); // 에러발생
즉, 한번 선언된 값이 더이상 바뀌길 원하지 않을 때 사용할 수 있다.
정리하자면
우리는 다음과 같이 Var, Let, Const를 활용할 수 있다.
- Var: 중복선언 가능한 변수 (되도록이면 사용하지 말 것)
- Let: 재할당 가능한 변수 (그야말로 변수)
- Const: 값이 변하지 않아야 하는 상황에 활용 (상수)