코드스테이츠/헷갈리는거 정리

원시 자료형과 참조 자료형

욱둥 2023. 1. 2. 11:51

📌 원시 자료형(primitive data type)

객체가 아니면서 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에 영향이 가지 않는다.(immutable)

📌 참조 자료형(reference data type)

원시 자료형이 아닌 모든 것

= 배열[], 객체{}, 함수function(){} 가 대표적

✅ 참조 자료형 특징

1) 하나의 변수에 대량의 데이터가 담긴다.

2) 그래서 참조 자료형은 그 크기가 유동적으로 변하는 특별한 데이터 보관함(heap)에 담긴다.

  • 다양하고 많은 정보의 크기가 수시로 변하는 것을 처리하기 위해서 참조 자료형은 heap이라는 별도의 메모리 저장 공간을 사용한다.
  • 'heap'이라는 공간에 데이터의 내용을 보관하고, 'heap'의 주소를 'stack'에 저장한다.

3) 참조 자료형이 변수에 할당될 때 값(value) 자체가 아닌 참조 자료형이 담겨 있는 특별한 데이터 보관함의 주소가 담긴다.

  • 실제 데이터는 heap에서 별도로 관리되고, 변수에는 데이터 보관함의 주소가 저장된다.
  • 데이터를 호출할 때 'stack'에 저장되어 있는 주소를 참조하여 'heap'에서 데이터를 찾아 반환한다.
  • JS: "메모리에 공간은 내가 알아서 부여할게. 변수는 그 공간의 주소만 참조하렴!"

4) 참조 자료형 데이터를 복사할 때, 데이터의 주소를 공유하게 되므로 복사본 데이터를 수정하면 원본 데이터에 영향을 준다.(mutable)

Let e = [70,90];
Let f = e;

f[0] =50;
E; //[50,90]	
F; //[50,90]
  1. 변수 e : address:1이 담김 = 데이터의 메모리주소가 담김
    변수 f : address:1이 담김 = 데이터의 메모리주소가 담김
  2. 특별 보관함 heap의 address:1에는 [70, 90] 데이터가 담김
  3. 변수 e,f의 값은 참조 자료형이므로, 같은 메모리 주소를 공유하기 때문에, 복사한 데이터에서 원소를 변경하면 address:1에서 변경됨.
  4. heap에 있던 데이터가 변경됨 = 기존의 데이터에 영향이 간다

 

참고: https://velog.io/@mmmdo21/JS-%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%EC%9B%90%EC%8B%9C%EC%9E%90%EB%A3%8C%ED%98%95-%EC%B0%B8%EC%A1%B0%EC%9E%90%EB%A3%8C%ED%98%95-%EC%A2%85%EB%A5%98%EC%99%80-%ED%8A%B9%EC%A7%95