Javascript에서 사용할 수 있는 변수 var
let
const
에 대해 알아보겠다.
javascript ES6에 추가된 let
은 변수에 값을 할당하고 다시 변수에 다른 값을 할당할 수 있는 mutable variable
이다.
재선언은 불가능하다.
let name = 'daseul';// let을 통해 name에 'daseul'할당 console.log(name); // 'daseul'출력 name = 'happy'; // name에 'happy'할당 console.log(name); // 'happy'출력 (재할당 가능) let name = 'bada' console.log(name); // Uncaught SyntaxError: Identifier 'str' has already been declared // (재선언 불가능)
let
은 block
안에 작성하게 되면 block
안에서 변수를 출력하고 사용할 수 있지만,
block
밖에서는 사용할 수 없다.
{ let name = 'daseul'; console.log(name); // 'daseul'출력 } console.log(name); // 아무값도 나오지 않음
만약 block
밖에 변수를 선언하게 되면 어디에서나 접근이 가능하다.
이러한 변수를 global variable
또는 전역 변수라고 하는데 이 변수들은 애플리케이션이 실행되는 동안 메모리안에 항상 탑재되어 있기 때문에 최소한으로 사용하는 것이 좋으며 조건문이나 반복문처럼 필요한 부분에서만 정의해 쓰는 것이 좋다.
let globalName = 'globla name'; { let name = 'daseul'; console.log(name); // 'daseul'출력 console.log(globalName); // 'globla name'출력 (block안에서 접근가능) } console.log(globalName); // 'globla name'출력 (block밖에서 접근가능)
let
과 마찬가지로 값을 할당하고 다른 값으로 변경가능하다. 재선언 또한 가능하다
변수 var
는 javascript에서 가장 먼저 사용된 변수로 hoisting
이 가능하다.
hoisting
이란 어디에 선언했는지에 상관없이 항상 제일 위로 선언을 끌어 올려주는 것을 말한다.
따라서 var
는 변수를 선언 전 값을 할당할 수 있다.
또한 값을 할당하기전에 출력도 가능하다.
값 할당 전 출력시
console.log(age); // 오류가 나는 것이 아닌 'undefined'라고 출력 age = 4; // 변수 선언 전 값 할당 var age; // 변수 선언
변수 선언 전 값 할당하고 출력시
age = 4; var age; console.log(age); // 변수를 선언전 값을 할당하였어도 '4'가 출력된다.
이를 let
을 이용해 실행하면 참조 에러(ReferenceError)
가 나게 된다.
var
는 let
과 다르게 중괄호로 block scope
안에서 할당해도 block scope
을 무시하고 벗어난 곳에서도 출력이 가능하다.
따라서 아무리 깊은 block
안에 선언하더라도 어디에서나 var
를 불러올 수 있다.
{ age = 4; var age; } console.log(age); // '4'출력
이러한 유연한 특징을 이용해 초창기, 프로그램을 만들때는 금방 개발이 가능했지만
프로그램이 점점 거대화 되면서 var
를 사용하게 되면 많은 오류와 보안이 취약해짐으로 인해 지금은 var
를 거의 사용하지 않는다.
const
는 let
, var
와 다르게 값을 한번 할당하면 값을 또다시 변경할 수 없는 immutable variable
이다.
변수에 값을 할당할 때 포인터
를 통해 값을 가리키는데 const
는 이 가리키는 포인터
가 잠겨있다.
따라서 const
는 변수 재선언, 재할당이 모두 불가능하다.
const name = 'daseul'; console.log(name); // 'daseul' 출력 const name = 'happy'; console.log(name); // Uncaught SyntaxError: Identifier 'name' has already been declared // (재선언 불가능) name = 'javascript'; console.log(name); // Uncaught TypeError: Assignment to constant variable // (재할당 불가능)
이렇게 변수의 값을 변경할 수 없는 const를 사용하게 되면 한번 할당한 값을 다른 해커들이 다시 바꾸지 못하게 하여 보안을 높일 수 있으며, 개발을 할 때 실수를 방지할 수 있다.
✔️
let
변수 재할당 가능 / 재선언 불가능
✔️var
변수 재할당 가능 / 재선언 가능
✔️const
변수 재할당 불가능 / 재선언 불가능
어떤 변수 선언 방식을 사용하는 것이 좋을까?
변수 선언에는 const
를 기본적으로 사용하고, 재할당이 필요한 경우를 한정해 let
을 사용하는 것이 좋다.
객체를 재할당하는 경우는 생각보다 흔하지 않다. const
를 사용하면 의도치 않은 재할당을 방지해 주기 때문에 보다 안전하다.
💡 재할당이 필요한 경우에 한정해 let 을 사용한다. 이때, 변수의 스코프는 최대한 좁게 만든다.
💡 재할당이 필요 없는 상수와 객체에는 const 를 사용한다
참고 강의
드림코딩