자바스크립트 변수와 상수
프로그램을 만들 시 잠시 특정한 값을 저장해야 하는 상황이 자주 발생한다. 이때 변수를 사용한다.
변수를 사용하면 아래와 같이 값을 저장할 수 있다.
let total = 500 + 300 + 1000;
total;
> 1800
더하기 연산자의 결과 1800을 total이라는 이름으로 저장했고 콘솔에 total을 입력하면 저장된 1800이 출력된다.
또 는 cosole.log(변수)로 변수의 값을 콘솔에 출력할 수도 있다.
cosole.log(total);
>1800
위와 같이 total처럼 값을 저장하고 저장한 값을 불러오는 것을 변수(variable) 라고 하며 변수를 만드는 행위를 선언( declaration) 한다고 표현하므로 변수를 선언한다고 한다.
변수를 만드는 식은 ( var, let, const ... 개념은 따로 )
let 변수명 = 식;
let 다음에 선언하고자 하는 변수명을 적고 그 뒤에 대입 연산자(=)를 입력하고 변수에 저장할 식을 입력하면 된다.
또 한 변수명은 변수의 값이 무엇인지 알려주는 역할이기 때문에 의미가 있고 직관적으로 짓기를 권장한다.
let banana = 'apple';
위처럼 변수명은 banana(바나나)인데 저장된 값이 apple(사과)이면 사용자가 헷갈릴 수 있다.
또 한, 아무런 의미없는 변수명 a 라던가 b 같은 명을 사용하면 저장된 값이 무엇인지 추정하기가 매우 어렵다.
변수명은 아무렇게 지을 수도 없다 특수문자도 $와 _만 사용할 수 있으며 숫자로 시작해서도 안됀다.
변수명으로 사용할 수 없는 단어도 있다. 이를 예약어라고 하는데 자바스크립트 프로그래밍에서 특정한 역할로 사용되므로 변수명으로는 쓰지 않는다. ( 예 : let, var, typeof, while, default, else, enum, for, function 등등 . . ) 예약어지만 변수명으로 쓸 수 있는 경우도 있고 아님에도 쓰지 못하는 경우도 있으므로 자바스크립트 프로그래밍을 하며 보게 되는 단어들은 변수명으로 피하는게 좋다.
변수의 값 수정
변수는 변하는 숫자라는 의미이지만 숫자 자료형 외에 다양한 자료형의 값을 저장할 수 있고 앞에 있는 포인트를 짚으면 '변하는'이다. 한 번 저장한 값을 바꿀 수 있다는 뜻이다.
let change = '바꿔 봐';
change = '바꿨다';
change;
> "바꿨다"
change라는 변수를 선언하고 초기화한 뒤 change 변수의 값을 대입 연산자를 사용해 새로운 값을 입력했다.
변수에 넣은 값을 비울 수도 있다. undefined를 대입하거나 null을 대입하는 것이다.
change = undefined;
> undefined
change = null;
> null
두 경우 모두 변수의 값을 빈 값으로 바꾼다는 점이 같지만 서로 다른 값이기 때문에 다른 의미를 부여할 수 있다.
자신을 자신에 대입할 수도 있다.
let number = 5;
number = number + 3;
> 8
number += 3;
> 8
number에게 3을 더하고 싶을 때는 += 를 쓸 수 있다. 대입 연산자는 산술 연산자보다 우선순위가 낮기 때문에 먼저 number에 3을 더한 뒤 그 값인 8을 number에 대입하는 것이다. 비슷한 원리로 -=, *=, /=, %-, **= 연산자도 있다.
상수만들기
let 외에도 변수를 선언하는 예약어로 const가 있다. const는 상수(constant)의 줄임말이다.
변수와 상수는 무슨 차이가 있을까? 변수(變數)는 변하는 수이지만 반대로 상수(常數)는 변하지 않는다는 뜻이다.
상수랑 변수는 반대 개념인가 ?
상수와 변수가 뜻을 보면 완전히 반대 개념임을 알 수 있다. 그런데 왜 let과 const를 묶어서 변수라고 통칭했을까? const는 엄밀히 말해 상수가 아니기 때문이다. 상수는 객체의 내부 값에는 적용되지 않는다 따라서 엄밀한 의미에서 상수가 아니므로 자바스크립트에는 보통 const도 변수라고 칭하지만 밑에서 배울 특성을 가진 변수라고 생각하면 된다.
상수는 왜 사용할까
코딩시 변수의 값을 수정할 일이 생각보다 그리 많지 않고 실수로 값을 수정하는 일을 막기 위해 상수를 사용한다.
let string1 = '엄청 긴 문자열입니다.';
string1 변수가 나중에 실수로 수정되는 것을 막기 위해 const로 바꿀수 있다.
const string1 = '엄청 긴 문자열입니다.';
위와 같이 상수로 만들면 string1이 수정되지 않음이 보장되어 더 안전한 코딩을 할 수 있다.
상수는 값이 수정되지 않음을 확인해보자 let은 처음 값을 대입 후 다른 값을 대입해 수정할 수 있었다.
하지만 const는 상수이므로 한 번 대입하면 다른 것을 대입할 수 없다.
const도 식이 아니라 선언문이기 때문에 콘솔에 undefined가 출력된다. 그리고 다른 값을 대입하면 에러가 발생한다. 하지만 값을 바꿀 수 없다는 뜻은 아니다.
const로 선언한 상수도 다시 선언할 수 없다. 앞에서 선언한 value 상수를 다시 선언해보자.
또 한, 한 번 값을 대입하면 다른 값을 대입할 수 없다는 특징 때문에 상수 선언시 초기화 ( 선언과 동시에 값을 대입하는 것 ) 하지 않으면 에러가 발생한다.