- 객체가 아니면서 method를 가지지 않는 6가지의 타입
= string, number, bigint, boolean, undefined, symbol, (null)
1) 변수 하나당 하나의 데이터만을 담는다
2) 원시 자료형은 고정된 크기의 보관함(stack)에 담긴다.'stack'이라는 저장공간에 변수이름과 데이터가 함께 저장된다
3) 원시 자료형이 변수에 할당될 때 값(value) 자체가 담긴다
4) 원시 자료형 데이터를 복사할 때, 복사본을 수정해도 원본데이터에는 영향을 주지 않는다(immutable)
let A = 1;
B = A;
B; //1
B = 9;
A; //1
B; //9
변수 A에 담긴 원시 자료형을 B에 복사하는 경우,
데이터 값 자체만 복사되기 때문에
B에 데이터를 재할당해도 기존 데이터 A에 영향이 가지 않는다.
원시 자료형이 아닌 모든 것
= 배열[], 객체{}, 함수function(){} 가 대표적
1) 하나의 변수에 대량의 데이터가 담긴다.
2) 그래서 참조 자료형은 그 크기가 유동적으로 변하는 특별한 데이터 보관함(heap)에 담긴다.
3) 참조 자료형이 변수에 할당될 때 값(value) 자체가 아닌 참조 자료형이 담겨 있는 특별한 데이터 보관함의 주소가 담긴다.
실제 데이터는 heap에서 별도로 관리되고, 변수에는 데이터 보관함의 주소가 저장된다.
데이터를 호출할 때 'stack'에 저장되어 있는 주소를 참조하여 'heap'에서 데이터를 찾아 반환한다.
JS: "메모리에 공간은 내가 알아서 부여할게. 변수는 그 공간의 주소만 참조하렴!"
4) 참조 자료형 데이터를 복사할 때, 데이터의 주소를 공유하게 되므로 복사본 데이터를 수정하면 원본 데이터에 영향을 준다.(mutable)
Let e = [70,90];
Let f = e;
f[0] =50;
E; //[50,90]
F; //[50,90]
변수 e : address:1이 담김 = 데이터의 메모리주소가 담김
변수 f : address:1이 담김 = 데이터의 메모리주소가 담김
특별 보관함 heap의 address:1에는 [70, 90] 데이터가 담김
변수 e,f의 값은 참조 자료형이므로, 같은 메모리 주소를 공유하기 때문에, 복사한 데이터에서 원소를 변경하면 address:1에서 변경됨.
heap에 있던 데이터가 변경됨 = 기존의 데이터에 영향이 간다
https://velog.io/@elma98/TILToday-I-Learned-Immutability%EC%99%80-Mutability