본문 바로가기

🔥 🔥

자바스크립트의 원시값(Primitive Type)과 참조값(Reference Type)

반응형

자바스크립트는 원시타입과 참조타입 두가지의 자료형이 제공된다.

 

원시 타입 - null, undefined, string, number, boolean, symbol

참조 타입 - Array, Object, Function

 

 

원시 타입 데이터는?

 

- 변수에 할당될 때 메모리 상에 고정된 크기로 저장되고 해당 변수가 원시 데이터의 값을 보관한다.

- 원시 타입 자료형은 모두 변수 선언, 초기화, 할당시 값이 저장된 메모리 영역에 직접적으로 접근한다, 즉 변수에 새 값이 할당 될 때 변수에 할당된 메모리 블럭에 저장된 값을 바로 변경한다는 뜻이다. 

- 변수에 새로운 값을 할당하면 변수가 참조하는 메모리 공간의 주소가 바뀌게된다.

- 값을 복사

 

 

참조 타입 데이터는?

 

- 자바스크립트는 객체의 메모리를 직접 조작하지 않고, 해당 객체에 대한 '참조'를 조작한다. 따라서 객체를 가리키는 값은 '참조로 접근한다.'라고 한다.

- 크기가 정해져 있지 않고 변수에 할당될 때 값이 직접 해당 변수에 저장될 수 없으며, 변수에는 데이터에 대한 참조만 저장된다. 참조 타입은 변수의 값이 저장된 메모리 블럭의 주소를 가지고 있고, 자바스크립트 엔진이 변수가 가지고 있는 메모리 주소를 이용해서 변수의 값에 접근한다.

- 값을 참조

 

 


 

 

원시타입

 

let a = 1;
b = a;
a = 3;

console.log(a) //3
console.log(b) //1; 

 

- 각 변수 간에 원시 타입 데이터를 복사할 경우 데이터의 값이 복사된다.

 

let a = 1;
let b = 1;

console.log(a === b) //true;

 

- 값이 비교된다.

 

 

ex)

 

let a = "기본";
a = "수정";
let b = [1,2,3,4];

 

 

 

 

참조 타입

 

let a = {name: "computer", num:1};
b = a;
a.name = "hy";

console.log(a) //{name: "hy", num:1}
console.log(b) //{name: "hy", num:1}

 

- b에 a가 들어있다고 생각하는게 아니라, b가 a를 가르키고 있다(참조하고 있다)고 생각해야한다.

- 각 변수 간에 참조 타입 데이터를 복사할 경우 데이터의 참조가 복사된다.

 

let a = {name: "computer", num:1};
let b = {name: "computer", num:1};

console.log(a === b) //false

 

- 값이 들어있는 참조(주소)가 비교된다.

 

 

ex)

 

let arr = [1,2,3,4,5];
let obj = {name:"hy", age:26};