데굴데굴

<JavaScript> 원시 자료형과 참조 자료형 본문

Programming/JavaScript

<JavaScript> 원시 자료형과 참조 자료형

aemaaeng 2022. 9. 6. 10:50

원시 자료형 (primitive data type)

number, string, boolean, undefined, null 등이 해당된다. 

원시 자료형은 자료가 변수에 저장된다. 

변수에는 하나의 데이터만 담는다. 

원시 자료형은 값 자체를 변경할 수는 없지만, 값을 재할당할 수는 있다. (딥다이브 참조)

let num = 123;
let num = 1234567;

기존에 변수 num에 할당되었던 123은 1234567이 재할당된다고 해서 완전히 사라지지 않는다. 값은 어딘가에 남아있다. 

 

참조 자료형 (reference data type)

원시 자료형이 아닌 모든 것은 참조 자료형이다. 배열, 객체, 함수 등이 해당된다. 

변수에는 넣을 수 있는 자료의 크기가 제한되어 있기 때문에 참조 자료형이 새롭게 생김. 

원시 자료형은 변수에 값 그 자체가 저장되지만, 참조 자료형을 변수에 할당하면 값이 담긴 주소가 저장된다. 

참조 자료형은 데이터의 크기가 제각각이기 때문에 동적인 메모리 공간(heap)을 이용한다. 

 

원시 자료형과 참조 자료형의 비교

둘의 가장 두드러지는 차이는 변수에 값을 저장하는 방식이다. 

let num1 = 9394;
let num2 = num1;
num2 = 9596;

console.log(num1) // 9394
console.log(num2) // 9596

num1의 값을 num2에 복사하여 할당하고, num2를 다른 수로 바꿨다.

원시 자료형에서 변수는 하나의 값 자체를 저장한다.

2번 줄에서 num1의 값을 num2에 복사하면 똑같이 9394라는 숫자가 할당되지만, 실질적으로 두 값의 메모리 주소는 다르다. 

따라서 num2에 다른 값을 재할당해도 num1은 변하지 않는다. 

같은 원리로 num1에 다른 값을 재할당한다고 해서 num2가 변하는 것도 아니다. (딥다이브 143페이지 참조)

let person = { name: 'Steve'};
let human = person;
human.name = 'Daniel';

console.log(person.name); // Daniel

객체를 변수 person에 할당하여 그 객체를 또 human이라는 변수에 복사했다.

참조 자료형을 변수에 할당할 때에는 값 그 자체가 아니라 주소값이 저장되기 때문에 복사한 변수 human에서 객체의 값을 변경하면 본래 변수 person의 내용도 덩달아 바뀐다. 

Comments