💡 변수란 메모리의 주소정보를 갖고 있는 식별자이고, 재사용의 목적을 가지고 있습니다.
변수는 하나의 값을 저장하기 위해 확보한 메모리 공간 그 자체
또는 그 메모리 공간을 식별하기 위해 붙인 이름을 말합니다.
아직 이해하지 못해도 괜찮습니다. 아래에서 더 살펴보죠.
일반적으로 변수는 하나의 값(숫자, 문자열, 배열, 객체 등)을 저장하고
이를 재사용하기 위해서 만들어집니다.
변수가 필요한 상황을 살펴봅시다.
50 + 5;
우리는 50 + 5의 연산 결과를 얻고 싶고 이를 재사용하고 싶습니다.
그런데 위와 같이 50 + 5라고 코드를 작성하면 한 번은 연산결과를 사용할 수 있어도
2번 3번 재사용은 불가능합니다.
이를 해결하기 위해 나온 개념이 바로 변수입니다.
우리가 50 + 5라고 입력하면 메모리 어딘가(그 때마다 다름)에 연살결과인 55가 저장됩니다.
그런데 우리는 이 값에 접근하지 못합니다.
왜일까요? 메모리 주소를 모르기 때문입니다.
모든 데이터는 메모리에 저장됩니다.
메모리에 저장된 값을 알기 위해서는 메모리 주소를 통해 접근해야 합니다.
그런데 우리는 메모리 주소를 모르니 데이터에 접근할 수 없는 것이죠.
하지만
let result = 50 + 5;
라고 코드를 작성해주면 메모리 어딘가에 50 + 5의 연산결과가 저장되고, 연산결과가 저장된 메모리의 주소를 result가 갖게 됩니다.
그래서 우리는 연산결과인 55를 재사용하고 싶다면 메모리 주소를 갖고 있는 result라는 변수를 통해 메모리의 접근하고 접근한 메모리의 값을 사용할 수 있게 됩니다.
이처럼 변수는 위에 언급했던 것처럼 하나의 값(데이터)을 저장하기 위해 확보한 메모리 공간 그 자체 또는 그 메모리 공간을 식별하기 위해 붙인 이름을 말합니다.
이와 같은 이유로 변수 이름은 ‘메모리 공간을 식별(접근)할 수 있다’라고 해서 식별자 라고도 부릅니다.
let a; // 변수 선언
a = 10; // 변수 초기화
let b = 20; // 변수 선언 및 초기화
변수 선언이란 변수를 생성하는 것을 말합니다.
좀 더 자세히 설명하면 데이터를 저장하기 위한 메모리 공간을 확보하고
변수 이름과 확보된 메모리 공간의 주소를 연결해서
값을 저장할 수 있게 준비하는 것입니다.
변수를 사용하기 위해선 선언이 반드시 필요하겠죠??
javascript에서 변수를 선언할 때는 var, let, const
키워드를 사용합니다.
var에 취소선을 한 이유는
2015년에 나온 ES6 최신 문법에 let, const
키워드가
var의 여러 단점(함수 스코프, 재선언, 호이스팅)을 보완해서 나왔습니다.
그래서 근래에는 var를 안쓰는 추세라고 하더라고요.
var, let, const는 나중에 다뤄보도록 하겠습니다.
(드림코딩 엘리님의 말씀을 빌리자면 주변 동료가 var를 쓰면 등짝을 때리라고ㅋㅋㅋㅋ)
var num1;
let num2;
위와 같이 var와 let키워드를 사용해 변수를 선언하면 메모리에 공간이 확보되고
확보된 공간에는 아직 값을 할당하지 않아서 js 엔진에 의해
undefined
라는 값이 암묵적으로 할당되어 초기화됩니다.
일반적으로 초기화란 변수가 선언된 이후 최초로 값을 할당하는 것을 말합니다.
이것은 javascript의 독특한 특징입니다.
💡 자바스크립트 엔진은 변수 선언을 다음과 같은 2단계에 거쳐 수행한다.
1. 선언 단계 : 변수 이름을 등록해서 자바스크립트 엔진에게 변수의 존재를 알린다.
2. 초기화 단계 : 값을 저장하기 위한 메모리 공간을 확보하고 암묵적으로 undefined를 할당해 초기화한다.
💡
const
키워드는 선언과 동시에 초기화를 해줘야 합니다. 아니면 다음과 같은 에러메시지를 남깁니다.const
선언에 초기화가 없다고 에러메시지를 빵! 하고 남겨주죠.
왜const
는 선언과 동시에 초기화를 해줘야 할까요?
이유는 const는 재할당이 불가능한 특성을 지니고 있기 때문입니다.
위에서 언급했던 것처럼 변수 선언만 했을 시에도 자바스크립트 엔진에 의해서 암묵적으로 초기화(할당)이 됩니다.
하지만 const는 재할당이 불가능하다는 특성을 가지고 있어서(undefined를 사용하진 않을 것이므로)선언과 초기화를 동시에 해줘야 하는 것입니다.
오늘 배운 변수라는 개념은 결국 메모리의 공간을 확보하고 확보한 공간에 있는 데이터에 접근하기 위해 만들어진 개념이라는 것을 기억하시기 바랍니다!
또 var, let 키워드 같은 경우는 변수 초기화를 하지 않고 선언만 해줄 시 자바스크립트 엔진이 암묵적으로 undefined로 초기화 한다는 것도 기억해 둡시다~