Primitive & Reference Type

김병엽·2024년 7월 23일

데이터 저장 방식에서 차이점이 발생.

let a = 1;
function func(b){
  b = 2;
}

func(a);
console.log(a); // 1
let a = {
  first : 'abc',
  second : 55
}

function func(b){
  b.second = 2;
}

func(a);
console.log(a); // 2

두 예시에서 왜 각각의 데이터가 저장되는 방식이 다른가?


데이터 타입

  • 기본형(Primitive) 타입 - Number, String, Boolean, undefined, null, ES6에서 추가된 Symbol.

  • 참조형(Reference) 타입 - Object, Array, Function, Date, RegExp, ES6에서 추가된 Map, WeakMap, Set, WeakSet.


데이터 저장 방식

▪️ 메모리 공간

각각의 공간은 주소를 가지고 있다.

1. 기본형(Primitive) 타입

▪️ 데이터 저장

let x = 1;
let y = 2;
let z = x;

▪️ 데이터 변경

let x = 1;
let y = 2;
let z = x;

x = 3;

▪️ 데이터 삭제

가비지 컬렉터(Garbage Collector, GC)라는 것이 있다.

메모리가 부족해지는 등 특정 시점이 되면 참조 카운트가 0인 수거 대상들을 비우는 역할을 한다.


2. 참조형(Reference) 타입

▪️ 데이터 저장

let a = {
  first : 'abc',
  second : 55
}

객체의 속성들을 담은 데이터 그룹이 시작하는 주소(@3001~)를 가리키고 있다.

▪️ 데이터 변경

let a = {
  first : 'abc',
  second : 55
}

function func(b){
  b.second = 2;
}

func(a);
console.log(a)

변수 a와 b는 모두 뿌리가 같은 @2001을 가리키므로 이러한 변화는 두 변수 모두에게 영향을 미치게 된다.

원 배열 a 와 복사된 배열 b 중 어느 하나를 수정하는 상황이 닥칠 때, 얕은 복사 a = b 를 한 경우 같은 주소를 가리키는 탓에 둘 모두가 변화한다.

그러나 깊은 복사를 하면 a를 수정하는 경우에는 a만, b를 수정하는 경우에는 b만 변화한다.


Reference

velog/@garcon

profile
선한 영향력을 줄 수 있는 개발자가 되자, 되고싶다.

0개의 댓글