변수와 상수, let은 왜 let일까

김민아·2022년 7월 10일
post-thumbnail

변수 let과 상수 const

변수 선언하기

let userName;
  • 변수는 데이터를 저장할 때 쓰이는 ‘이름이 붙은 저장소'이다.
  • let, const, var를 사용해 변수를 선언할 수 있다.
  • 선언은 한 번만 한다. 여러번 선언하면 SyntaxError가 발생한다.
  • 변수명에는 오직 숫자, 기호 $_만 들어갈 수 있다.
  • 변수명의 첫글자가 숫자가 될 수 없다.
  • 카멜 방식과 _ 언더스코어 방식이 있다.
  • 대소문자를 구별한다.
  • 선언없이 할당할 수 있지만, 절대 권장하지 않는다.
  • ‘use strict’ 를 사용하면 오래된 스크립트의 문법을 호환하지 않기 때문에 선언없이 할당할 수 없다.
  • 예약어를 사용할 수 없다. 예약어목록
    주로 알려진 예약어는 class, if, else, delete, for, this, typeof

let 변수 vs const 상수

  • let 변수는 말 뜻 값이 변하는 값을 의미한다.
  • const 상수는 값이 절대 변하지 않음을 의미한다.

왜 let이라고 쓰게 되었을까?

const는 constant의 줄임말인것 같은데, let은 무엇의 약자인지 궁금해서 찾아본 결과. What does let variable stand for? 이라는 질문에 여러 사람들이 다양한? 의견을 남겨 놓았다. MDN에서도 아래 SO의 질의응답을 인용하고 있다.
SO

기존에 있는 var 변수(low-level)와 다른, 블록 범위를 가진 지역 변수로 사용할 키워드(high-level)가 필요했으며, let은 이미 Scheme과 Basic같은 초기 프로그래밍 언어에서 채택된 수학적인 statement 였기에 차용할 수 있었을 것이다..라는 의미로 해석이 된다. 그리고 영어의 let ~하게 두자 라는 의미로 let myPet = ‘dog’처럼 언어적인 구조에 있어서 차선책으로 취한 것이다라는 의견도 있다.
종합해서 이해한 바로는 높은 수준의 추상화에 적합한 변수명이 필요했고 다른 많은 언어에 있어 관용적이고 이해하기에도 직관적인 let이 채택되었다는 것 같다.

var은 사용하지 않는다

var로 선언한 변수는 함수 범위(스코프)이거나 전역 범위이다.

  1. var는 블록 {} 밖에서도 접근이 가능하다. (스코프)
  2. var는 선언하기 전에 사용할 수 있습니다. (호이스팅)

스코프, 호이스팅은 다시 공부해 보기로 하고,

이 두가지 특징은 대부분의 상황에서 부작용을 야기하며, let이 표준에 도입된 이유이기도 하다. 변수는 블록 레벨 스코프를 갖는게 좋다!


변수에 할당하기

// userName은 위에 선언했었다!
userName = "Steve" 
  • = 기호를 사용해서 데이터를 저장하는 것을 ‘값을 할당한다’고 한다.

const 변수의 에러 발생 예

let greeting = 'Hello'
const userName = 'Mina'

userName = 'lalala'

값을 재할당하면 나오는 const 오류


변수명 잘 짓기

변수명은 간결하고 명확해야 한다! 무엇을 담고 있는지 직관적으로 설명할 수 있어야 한다.

  1. 무엇인지 직관적으로 알 수 있어야 한다.
    userName, shoppingCart, messageTitle, userPhoneNumber, currentYear
  2. 알아보기 힘든 줄임말이나 a, b, c 아무 의미없는 짧은 이름은 피한다
  3. 변수로 datavalue는 나쁜 예시. 문맥상 변수가 가리키는 데이터나 값이 아주 명확할 때만 사용한다.

변수의 재사용에 대해서

재사용된 변수는 과거에 붙여진 스티커를 떼지 않은 채 물건만 바뀐 상자와 같다.

변수를 재사용하면 선언에 쏟는 노력을 덜 수는 있지만, 디버깅에 더 많은 시간을 쏟아야 한다. 모던 자바스크립트 압축기와 브라우저는 코드 최적화를 잘 하기 때문에 변수를 추가한다고 해서 성능 이슈가 생기지 않는다.


출처

위 내용은 변수와 상수에 대해서 복습하면서 모던 자바스크립트 내용을 정리한 것이다. 호이스팅과 블록 스코프를 배우기 위한 준비운동(?)으로. 변수 재사용을 지양한다는 점이 매우 흥미롭다. 귀찮음은 둘째치고 왠지 뭐가 됐든 아껴쓰는게 좋을 것 같았는데, 개발 생태계는 좀 더 의미론적Sementic 이고 엄격한Strict 환경을 지향하는 방향으로 나아가는 것 같다.

변수와 상수 | 모던 자바스크립트
JS에서 왜 블록 스코프 변수를 let이라고 명명했을까? | SO

0개의 댓글