오늘 처음 자바 강의를 듣는데 변수 선언 방식에서 let을 쓰기도 하고 const를 쓸 때도 있었다. 인터넷을 검색해보니 var라는 것도 있댄다... 무슨 차이일까? 그래서 인터넷 검색을 하면서 그 차이점을 정리하려고 한다.
우선, var
는 변수 선언 방식에 있어서 큰 단점을 가지고 있다.
var name = 'bathingape'
console.log(name) // bathingape
var name = 'javascript'
console.log(name) // javascript
변수를 한 번 더 선언했음에도 불구하고, 에러가 나오지 않고 각기 다른 값이 출력되는 것을 볼 수 있다.
이는 유연한 변수 선언으로 간단한 테스트에는 편리 할 수 있겠으나, 코드량이 많아 진다면 어디에서 어떻게 사용 될지도 파악하기 힘들뿐더러 값이 바뀔 우려가 있다.
그래서 ES6 이후, 이를 보완하기 위해 추가 된 변수 선언 방식이 let
과 const
이다.
위의 코드에서 변수 선언 방식만 바꿔보자.
let name = 'bathingape'
console.log(name) // bathingape
let name = 'javascript'
console.log(name)
// Uncaught SyntaxError: Identifier 'name' has already been declared
name
이 이미 선언 되었다는 에러 메세지가 나온다. (const
도 마찬가지)
변수 재선언이 되지 않는다.
그렇다면 let
과 const
의 차이점은 무엇일까?
이 둘의 차이점은 immutable 여부이다.
let
은 변수에 재할당이 가능하다. 또한 재할당한 값의 타입을 변환할 수 있다
ex) let num = 1;
num = true;
num = ? /// true;
let name = 'bathingape'
console.log(name) // bathingape
let name = 'javascript'
console.log(name) // Uncaught SyntaxError: Identifier 'name' has already been declared
name = 'react'
console.log(name) //react
하지만 const
는 변수 재선언, 변수 재할당 모두 불가능하다.
참고로 const는 'constant'의 약자로 상수를 의미하며 상수는 항상 일정한 값이기에 바뀌지 않는다. 주로 확실한 값을 유지할 경우 쓴다.
예시) 원주율(3.14159)이나 1주일(0일)
const hens = 4;
hens 20; // error!!
const name = 'bathingape'
console.log(name) // bathingape
const name = 'javascript'
console.log(name)
// Uncaught SyntaxError: Identifier 'name' has already been declared
name = 'react'
console.log(name)
//Uncaught TypeError: Assignment to constant variable.
그렇다면, 어떤 변수 선언 방식을 써야할까?
변수 선언에는 기본적으로 const
를 사용하고, 재할당이 필요한 경우에 한정해 let
을 사용하는 것이 좋다.
그리고 객체를 재할당하는 경우는 생각보다 흔하지 않다. const
를 사용하면 의도치 않은 재할당을 방지해주기 때문에 보다 안전하다.
재할당이 필요한 경우에 한정해 let
을 사용한다. 이때, 변수의 스코프는 최대한 좁게 만든다.
재할당이 필요없는 상수와 객체에는 const
를 사용한다.