본문 바로가기
웹/JavaScript

데이터 타입 Primitive Type VS Reference Type

by void pattern 2022. 11. 19.

데이터 타입 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의 값을 변경하게 되면 
    데이터 영역의 값은 그대로이고(데이터 영역 안 변함), 각 객체의 변수 영역의 값이 변경된다(객체 변수 영역 변함).

 

댓글