Modern JS 에서는 더이상 var 타입을 사용하지 않아도 됩니다.
변수 하나만 있었던 JS에는 이제 변수(let)와 상수(const) 개념을 가진 자료형이 생겼습니다.
구분 | Java | Means |
let | datatype | first defined, allowed, ... after you can change it |
const | final datatype | first defined, allowed, ... after you can't change it |
(더하여 var 타입도 아직 사라지지 않고 지원되고 있다.)
이러한 변화는, 어떤 관점에서 보면, 타입의 다양화로 인해 사용에 불편함이 생겼다고도 볼 수 있을 것 같습니다.
하지만, 저는 이것이 놀라운 업데이트 중 하나라고 생각합니다.
아직 코딩을 공부한 기간은 짧으나, Java라는 언어를 처음으로 접했을 때의 첫인상은 놀랍도록 효율성을 추구하는 것 같다 였습니다. 여기서의 효율성이라고 함은, 코딩을 빠르고 쉽게 하는 것이 아니라, 데이터 처리의 효율(능률)을 높일 수 있는 여러 가지 제약에 대한 부분이었습니다.
실제로는 많이 쓰지 않다고 했지만, 다음의 상황을 가정해서 생각해봅시다.
|
byte 로 선언을 하는 것이 int 로 선언을 하는 것보다 메모리 상의 공간을 덜 차지하게 되기 때문에, 이러한 Java의 특성은 과거 HW 의 한계를 극복하는데 효과적이었음을 추측해볼 수 있었습니다.
그러한 관점에서 본다면 JS 의 let, const 타입의 추가는 당연한 것일 지도 모르겠습니다.
왜냐하면, 현재 웹(웹앱 포함)은 다양한 디바이스 환경에 맞춰서 Responsible Visual 을 지원하거나 지원하려하며, 이러한 과정에서 필연적으로 메모리의 사용량은 늘어나기 마련입니다. 더하여 빅데이터나 여러 API 를 이용한 복합 서비스들의 등장과 동시에 메모리를 절약해야 할 필요성이 커지고 있음도 부정하지 못할 것이라 추측합니다.
그러한 의미에서 변하지 않는, 변할 수 없는 값인 const 타입의 추가는 매우 좋은 것이라고 생각합니다.
그것이 메모리 절약의 관점에서든 혹은 에러의 위험성이 낮아진다는 관점에서든 말입니다.
그리고 let 타입 또한 Old JS 가 가지고 있던 안좋은 기능인 Hoisting 이 제거된 모습을 확인할 수 있습니다.
Hoisting 에 대해서 궁금하시면 다음 관련 문서를 참고해주세요.
[JS 이론] Hoisting 이란 :: Unchaptered의 초보코딩 (tistory.com) Languages/javascript
console.log(name);
let name="Unchaptered";
Uncaught ReferenceError: myName is not defined at something.js:someline
에러가 발생해서 너무 좋습니다.
왜냐하면, 소스코드를 위에서 아래로 읽어오는 JS의 고질적인 특성 상, 반드시 [Uncaught ERR] 가 발생할 수밖에 없는데,
[var]을 이용하면 이러한 에러를 넘겨버리고 undefined 로 출력을 해버리기 때문에, 사실상 something.js 는 중단되지 않고 실행됩니다. 그리고 그 결과로 예상하지 못한 에러의 값을 반환해버리는 결과가 나오게 되겠네요.
var는 자유롭기 때문에 편하지만 그만큼 치명적인 에러 발생의 위험성이 크고, let은 엄격하기 떄문에 어렵고 그만큼 치명적인 에러 발생의 위험이 작겠네요.
이러한 let의 특성을 Dead Zone 이라고도 부릅니다.
Dead Zone 말고도 let 의 대표적인 특징(정점)이 있는데 그것은 바로 Block Scope 입니다.
if (true) {
let hello="hi";
}
console.log(hello);
매우 낯설고 특이한 단어(기능)이네요... 하지만 우리는 이 기능을 Java와 같은 객체지향언어에서 매우 많이 접했습니다.
이 기능은 바로 [지역변수]와 [전역변수]의 개념을 JS 에도 추가해준다는 것입니다. [let hello]는 if 문 안에서 선언, 할당되었기 때문에 if 문이 종료되면 변수의 수명 또한 종료됩니다. 마치 Java의 [지역변수]같네요.
- var 의 특징 : Hoisting
- let 의 특징 : Dead Zone (Not-Hoisting) + Block Scope
'Programming Languages > javascript' 카테고리의 다른 글
[백엔드 JS 이론] Middleware (0) | 2021.08.07 |
---|---|
[백엔드 JS 이론] Router , Middleware, Controllers (0) | 2021.08.07 |
[백엔드 JS 이론] Index (0) | 2021.08.07 |
[Modern JS 이론] Function & Arrow Function (0) | 2021.08.06 |
[Modern JS 이론] Hoisting 이란 (0) | 2021.08.05 |