데이터 타입 Primitive Type(기본형) VS Reference Type(참조형)
- Primitive Type(기본형) : Number, String, Boolean, null, undefined, Symbol
- Reference Type(참조형) : Object - Array, Function, RefExp, Set/WeakSet, Map/WeakMap...
메모리 동작 방식
- Stack Memomory : 변수, 기본형 데이터, 정적 할당
- Heap Memory : 참조형 데이터, 동적 할당
기본형 데이터에서 값이 변경되었을 때
var a = 'abc';
a = 'abcd';
변수 영역의 값은 가르키고 있는 주소를 직접 바꾸게 된다.
참조형 데이터에서 값 재할당
var obj ={
a:1,
b:'bbb'
}
//컴퓨터가 이해하는 방식
var obj; //변수 선언 후
obj ={ //할당
a:1,
b:'bbb'
}
//값 변경
obj.a = 2;
- 하나의 메모리에 값은 1개만 들어가야 한다.
- [변수 영역] 메모리에 obj을 저장한다.
- [데이터 영역] obj의 값을 메모리에 저장하는데 데이터의 프로퍼티가 2개 이상이다.
- a와 b 두 개이므로 a,b 각각 따로 메모리에 저장해야 한다.
- 각 프로퍼티가 저장될 수 있도록 별도의 메모리 공간을 마련한다.
- [각 객체(프로퍼티)의 변수 영역] 별도의 메모리에 a와 a의값, 또 다른 별도의 메모리에 b와 b의 값을 저장한다.
- obj.a = 2;
obj.a의 값을 변경하게 되면
데이터 영역의 값은 그대로이고(데이터 영역 안 변함), 각 객체의 변수 영역의 값이 변경된다(객체 변수 영역 변함).
'웹 > JavaScript' 카테고리의 다른 글
불변 객체를 만드는 간단한 방법 (0) | 2022.11.23 |
---|---|
자바스크립트 변수 복사 비교 (0) | 2022.11.21 |
자바스크립트 변수, 상수, 불변값, 불변성 (0) | 2022.11.13 |
ES6. setPrototypeOf (0) | 2021.01.21 |
JS Object.assign() 객체 복사, spread operator( ...) 차이점 (0) | 2021.01.20 |
댓글