[JavaScript] 변수 선언과 데이터 할당

문규찬·2021년 9월 8일
0
post-thumbnail

식별자와 변수

보통 '변수'와 '식별자'를 혼용하는데 변수는 변할수 있는 무언가 라고 해석하면 됩니다. 여기서 무언가란 데이터! 식별자는 어떤 데이터를 식별하는데 사용되는 이름 즉 변수명 입니다.

데이터 할당

var a=10;

기본적인 변수 선언식입니다.
풀어쓰면 변할수 있는 데이터를 만든다 이 데이터의 식별자는 a로 한다
결국 변수란 결국 변경 가능한 데이터가 담길 수 있는 공간 또는 그릇

변수영역과 데이터영역을 분리해서 생각해 보자
10이라는 값을 메모리 어딘가에 @5004에 저장을하고
식별자 a를 지정한 변수영역 주소 @1003 에 @5004를 대입한다.

1️⃣ 불변값

'변수'와 '상수'를 구분하는 성질은 변경 가능성 입니다. 바꿀 수 있으면 변수, 없으면 상수입니다.

변수와 상수를 구분 짓는 변경 가능성의 대상은 변수영역 메모리입니다. 하번 데이터 할당이 이뤄진 변수 공간에 다른 데이터를 재할당할 수 있는지 여부가 관건!!

반면 불변성의 여부를 구분할 때의 변경 가능성의 대상은 데이터 영역 메모리 입니다.

var a = 'abc'
a= a+ 'def'

var b=5
var c=5
b= 7

기존의 'abc'가 'abcdef'로 바뀌는 것이 아니라 'abcdef'를 새로운 문자열을 만들어 변수 a에 저장합니다. 위 그림에서 @1003 의 식별자 a의 변수는 값이 @5005가 될 것입니다.

b의 값을 5에서 7로 변경하는 과정에서 기존에 저장했던 7을 찾아 있으면 재활용 하고 없으면 새로 만들어 b에 저장합니다. b의 값은 @5007이 됩니다.

이처럼 문자열 값도 한번 만든 값을 바꿀 수 없고 숫자 값도 마찬가지 입니다. 변경은 새로 만드는 동작을 통해서만 이뤄집니다. 이것이 바로 불변값의 성질입니다. 한 번 만들어진 값은 가비지 컬렉팅을 당하지 않는 한 영원히 변하지 않습니다.

2️⃣ 가변값

기본형 데이터는 모두 불변값이라 했습니다. 그렇다면 참조형 데이터는 모두 가변값일 것 같은 느낌이 듭니다.

var obj1 = {
	a:1,
	b: 'bbb'
};

기본형 데이터와의 차이는 '객체의 변수(프로퍼티) 영역' 이 별도로 존재한다는 점입니다.
객체가 별도로 할애한 영역은 변수 영역일뿐 '데이터 영역'은 기존의 메모리 공간을 활용합니다.
데이터 영역에 저장된 값은 모두 불변입니다.
그러나 변수에는 다른 값을 얼마든지 대입할 수 있습니다. 바로 이부분 때문에
흔히 참조형 데이터는 가변값 이다 라고 합니다.

0개의 댓글