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를 사용하는 것이 바람직하는 말 또한 쉽게 이해할 수 있을 것이라고 생각한다.
'자바스크립트' 카테고리의 다른 글
[Javascript] 기본 자료형 종류 (Primitive Type) (0) | 2021.09.12 |
---|---|
[Javascript] Mutable / Immutable Data Type (0) | 2021.09.11 |
[Javascript] 데이터 타입 (Data types) - Primitive / Object (0) | 2021.09.11 |