[Javascript] 변수(Variable)란? 종류와 차이점

2021. 9. 10. 01:13자바스크립트

변수란?

- 자바스크립트에서 변수(Variable)란 무엇인가?

 

변수는 프로그램을 만들 때 특정한 값을 저장해야 할 때 사용한다.

변수의 이름과 값은 컴퓨터의 메모리에 저장된다.

컴퓨터의 메모리는 창고이고, 변수를 상자라고 생각해보자.

변수에 저장된 값은 상자 안에 들어있는 내용물이다.

창고에 여러 상자를 저장해놓고 나중에 어떤 상자를 찾을 때 상자에 어떤 내용물이 들었는지 구분하고 찾기 위해 상자에 이름표를 붙인다. 이 때, 상자의 이름표기 변수명이다.

상자의 내용물에 따라 이름을 적절하게 지어서 이름표를 붙여놓고 상자를 관리한다.

쉽게 변수 자체를 특정값을 저장하는 저장창고라고 생각해도 된다.

 

변수의 종류

- 변수에는 어떤 것이 있는가?

 

자바스크립트에서 쓸 수 있는 변수를 선언하는 예약어에는 세가지가 있다.

바로 var, let, const이다.

 

결론부터 말하자면, var는 더 이상 쓰지 않아야 하고, const를 주로 쓰는 것이 좋다.

let은 ES6 문법에 추가된 것으로 var 대신 쓸 수 있다.

 

각각의 특징을 살펴보자.

 

 

var

ES6에 let이 추가되기 전에는 var를 사용했다.

이제는 더 이상 var는 사용하지 않는 것이 좋다.

몇가지 문제점이 있어 오류를 일으킬 수 있기 때문이다.

 

1. 변수를 선언하기도 전에 값 저장이 가능하다.

즉, Hoisting의 성질을 가지고 있다.

Hoisting이란 선언한 곳의 위치가 어디든지 상관없이 항상 제일 위에 선언을 끌어 올려주는 것을 말한다.

 

2. *Block scope이 없어서, 블록' { } ' 을 무시한다.

블록 안에서 var를 이용해 선언을 했어도 블록 밖에서 접근이 가능하다는 것이다.

 

ex)

{

age = 4; // 변수가 선언되기 전에 값을 저장함.

var age; // Hoisting성질을 가지고 있어 변수 선언이 나중에 이루어졌지만 변수 선언을 위에서 먼저 한 것과 같음.

}

console.log(age); // 블록 밖에서 변수에 접근을 하는데도 접근이 가능함.

 

=> 대부분의 다른 프로그래밍 언어에서는 변수를 선언하고나서 값을 저장하는 것이 가능하다.

자바스크립트에서 let이나 const를 사용할 때도 마찬가지이다.

하지만, 이렇게 Hoisting의 성질을 가지고 있어 의도적으로 { } 블록 안에 변수를 선언해도 소용이 없게 된다. 

 

이전에는 이런 유연성을 이용해서 프로그램을 만들기도 했지만, 이런 특징들때문에 선언하지도 않은 변수 값이 할당되는 등 문제가 생길 수 있다. 그런 위험 부담이 있는데도 굳이 var를 쓸 이유가 없는 것이다.

 

*Block scope이란?

괄호를 이용해서 코드를 블록 안에 작성하면 블록 밖에서는 블록 안에 있는 내용을 볼 수 없고 접근할 수 없다.

 

 

let

let을 이용하여 변수를 정의하면 앞서 저장한 값이 있더라도 추후에 다른 값으로 변경하여 저장할 수 있다.

즉, 저장된 값의 내용을 바꿀 수 있다는 말이다.

 

처음 값을 저장한 뒤

읽기(read) / 쓰기(write) 가능

 

ex)

let a = 1; // a에 1을 저장함.

a = 2; // a의 값이 2로 변경되어 저장됨.

console.log(a); // 2가 출력됨.

 

 

const

const는 상수(Constant)이다. 상수는 변하는 않는 수라는 뜻이다.

const를 이용해 변수를 정의하고 한번 값을 저장하면 절대 바꿀 수 없다.

그런데 const는 변수(Variable)에 포함되는 것이고, 상수와 변수는 정 반대의 개념이 아닌가?

여기서 조금 혼동이 올 수도 있을 것이다.

하지만 엄밀히 말하면 const는 완전한 상수는 아니다.

상수는 기본적으로 처음 저장한 값을 변경할 수 없지만, 객체의 내부에서는 이 상수의 특성이 적용되지 않기 때문이다.

쉽게 상수의 성질을 가진 변수라고 이해하면 된다.

 

처음 값을 저장한 뒤

읽기(read)만 가능

 

ex)

const a = 1;

a = 2; // 값 변경 불가능하기 때문에 오류 발생

 

 

 

 

 

앞서 var는 쓰지 않아야 한다고 말했지만 아예 쓸 수 없는 것은 아니다.

지금도 사용할 수 있고 분명히 사용하는 사람도 있을 것이다.

하지만 var에게는 여러 문제점이 있고, 이것은 오류를 불러일으킬 수 있다.

var는 오래된 문법이고 요즘은 잘 사용하지 않는다고 해서 몰라도 상관없다는 의미는 아니다.

오래된 웹사이트라면 여전히 var로 만들어진 것도 존재하고 있다.

우리는 이미 만들어진 코드를 읽을 줄 알아야 한다.

또한 그 개념과 현재는 사람들이 사용하지 않게 된 이유를 알고 이해하고 있어야 한다.

무언가 사라지고 새로운 것으로 대체되는 것은 비단 자바스크립트의 변수라는 좁은 개념에서만 국한되는 것이 아니다.

코딩의 세계에서, 더 나아가 현실에서 생기는 변화 또한 같은 이유를 가지기도 한다.

이것을 파악한다면 const를 사용하는 것이 바람직하는 말 또한 쉽게 이해할 수 있을 것이라고 생각한다.