[JavaScript] var, let, const 차이점

Chunli91·2022년 8월 22일
0

자바스크립트

목록 보기
2/24
post-custom-banner

*1짤 요약

오늘 처음 자바 강의를 듣는데 변수 선언 방식에서 let을 쓰기도 하고 const를 쓸 때도 있었다. 인터넷을 검색해보니 var라는 것도 있댄다... 무슨 차이일까? 그래서 인터넷 검색을 하면서 그 차이점을 정리하려고 한다.

1. 변수 선언 방식

우선, var는 변수 선언 방식에 있어서 큰 단점을 가지고 있다.

var name = 'bathingape'
console.log(name) // bathingape

var name = 'javascript'
console.log(name) // javascript

변수를 한 번 더 선언했음에도 불구하고, 에러가 나오지 않고 각기 다른 값이 출력되는 것을 볼 수 있다.

이는 유연한 변수 선언으로 간단한 테스트에는 편리 할 수 있겠으나, 코드량이 많아 진다면 어디에서 어떻게 사용 될지도 파악하기 힘들뿐더러 값이 바뀔 우려가 있다.

그래서 ES6 이후, 이를 보완하기 위해 추가 된 변수 선언 방식이 letconst 이다.

위의 코드에서 변수 선언 방식만 바꿔보자.

let name = 'bathingape'
console.log(name) // bathingape

let name = 'javascript'
console.log(name) 
// Uncaught SyntaxError: Identifier 'name' has already been declared

name이 이미 선언 되었다는 에러 메세지가 나온다. (const도 마찬가지)

변수 재선언이 되지 않는다.
그렇다면 letconst 의 차이점은 무엇일까?
이 둘의 차이점은 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.

2. 정리

그렇다면, 어떤 변수 선언 방식을 써야할까?

변수 선언에는 기본적으로 const를 사용하고, 재할당이 필요한 경우에 한정해 let 을 사용하는 것이 좋다.

그리고 객체를 재할당하는 경우는 생각보다 흔하지 않다. const 를 사용하면 의도치 않은 재할당을 방지해주기 때문에 보다 안전하다.

재할당이 필요한 경우에 한정해 let 을 사용한다. 이때, 변수의 스코프는 최대한 좁게 만든다.

재할당이 필요없는 상수와 객체에는 const 를 사용한다.

3. 참조문서

https://velog.io/@bathingape/JavaScript-var-let-const-%EC%B0%A8%EC%9D%B4%EC%A0%90#3-%EC%A0%95%EB%A6%AC

profile
30대에 새로운 도전을 시도하는 사람입니다.
post-custom-banner

0개의 댓글