본문 바로가기
Javascript

원시타입, 객체타입 변수와 깊은복사, 얕은복사

by jennyiscoding 2022. 9. 7.

변수의 데이터 타입은 아래와 같이 두가지가 있다. 

원시타입 : 단일데이터 단 한개의 값만 데이터에 저장한다. 

  메모리공간 : data의 값을 참조하여 변하지 않는다.

  복사 : 깊은복사를 한다. 
  ex) Boolean, Null, Undefined, Number, String, Symbol, ... 

객체타입 : data에 주소값을 저장하고 데이터는 heap에 저장한다. 

  메모리공간 : data에 heap의 주소 값을 할당하고 값은 heap에 저장을 한다. 

  따라서 메모리 공간이 동적으로 변한다. 

  복사 : 얕은 복사를 한다. 
  ex) Array, Object, Function, Data, Regex, ... 

 

깊은복사 : 원시타입 데이터는 새로운 주소에 값 자체가 복사. 새로운 값 수정 시 기존 값에 영향 X

얕은복사 : 복합데이터 타입은 새로운 주소에 기존의 주소값을 복사. 결국 같은 주소 값을 참조. 
새로운 값 수정 시 기존 값에 영향 O

 

깊은 복사와 얕은 복사 과정을 통한 이해)

let a = 4; // a4라는 값은 RAM에 저장이 되고 RAM의 주소값이 stack의 a에 저장이 된다.

let c = 4; //a4가 이미 선언 되어있으므로 c에는 a와 같은 RAM주소값이 저장이 된다.

c = 5; //a5라는 데이터가 새로 생기고 5라는 RAM의 주소값이 stack의 c에 들어간다.

a = c; //a에는 c의 RAM주소값이 들어간다.

c = 6; //a6이라는 데이터가 새로 생기고 6라는 RAM의 주소값이 stack의 c에 들어간다.

//원시타입 데이터기 때문에 새로운 주소에 값 자체가 복사되어 새로운 값 수정 시 기존 값에 영향 없다.