원시 자료형은 변수에 할당할 때 변경 불가능한 값 그 자체를 할당한다. 참조 자료형은 값 자체가 아닌 메모리 주소를 할당한다. 둘의 개념과 차이를 학습한 것을 포스팅하고자 한다.
원시 자료형은 객체가 아니면서 메소드를 가지지 않는 자료형이다. 원시 자료형을 변수에 할당할 때 하나의 값만 할당할 수 있으며, 변경 불가능한 그 값 자체가 할당된다. const로 선언한 변수가 아니라면 재할당은 가능하지만 할당했던 그 값 자체는 변경할 수 없다.
Number - 숫자형
String - 문자형
Boolean - 참과 거짓, true 외에 0, -0, NaN, Null, ""(빈 문자열), undefined 등이 거짓으로 표현된다.
Null - 의도적으로 비어있음을 표현한다. 불리언으로 표현시 0(거짓)이다.
Undefined - 값을 할당하지 않은 변수
BigInt - 임의 정밀도로 정수를 나타낼 수 있다.
Symbol
원시 자료형이 할당된 변수를 다른 변수에 할당하면 원본 원시 값이 복사되어 전달된다. pass by value
let exam = 80;
let copy = exam;
console.log(exam === copy); // true
exam = 100;
console.log(exam, copy); // 100
console.log(exam === copy); // fase
// exam과 copy는 변수라는 별개 메모리 공간이며, 그 공간에 할당 됐던 80, 100 등은 모두 별개의 값
참조 자료형은 원시 자료형이 아닌 객체, 배열, 함수 등을 참조 자료형이라고 부른다. 원시 자료형과 다르게 변수에 여러 데이터를 할당 할 수 있다. 참조 자료형이 할당되는 것은 변수에 값이 할당되는 것이 아닌 메모리 주소가 할당되는 것이기에 가능하다.
참조 자료형이 할당된 변수를 다른 변수의 할당하면 원본의 참조 값이 복사되어 전달된다. *pass by reference
let exam = {
num: 80
};
let copy = exam;
console.log(exam === copy); // true
exam.str = 'song';
copy.num = 50;
console.log(exam); // {num: 50, str: 'song'}
console.log(copy); // {num: 50, str: 'song'}
// exam과 copy는 변수라는 별개 메모리 공간이며, 그 공간에 할당 됐던 80, 100 등은 모두 별개의 값
원시 자료형은 변경 불가능한 값으로 변수 할당시 그 값 자체가 할당된다. 원시 자료형이 할당된 변수를 다른 변수에서 할당하면, 두 변수의 값은 별개의 값이다.
참조 자료형은 메모리 주소를 할당하며, 참조 자료형이 할당된 변수를 다른 변수에서 할당하더라도 할당된 메모리의 주소는 같다. 그렇기 때문에 다른 변수에서 데이터를 수정하더라도 원래 할당된 변수가 같이 변하게 된다.
그 이유는 heap 이라는 메모리 저장소에서 두 변수가 참조하는 메모리 주소가 같기 때문이다.