자바스크립트의 데이터 타입은 크게 원시 값과 참조 값 두 가지로 나뉨.
할당된 후 변경이 불가능한 기본 데이터. ****Immutability!
변수에 값을 할당하면 실제 값이 변수의 메모리 공간에 저장됨. 변수에 대한 조작은 기존 값에 영향을 미치지 않음. 새로운 값을 할당하면 변수가 참조하는 메모리 공간의 주소가 변경 됨.
// 원시 값
let num1 = 10;
let num2 = num1;
num1 = 20;
console.log(num2); // Output: 10
원시 값에는 Number, String, Boolean, Null, Undefined, Symbol 등이 있음.
변경 가능한 객체 데이터. Mutability!
변수에 값을 할당하면 실제 데이터가 아닌 메모리 주소를 참조함. 이렇게 변수에 대한 조작이 원본 객체를 직접 변경할 수 있음. 변수의 메모리 공간에 객체의 참조값이 저장되기 때문에.
// 참조 값
let obj1 = { a: 1 };
let obj2 = obj1;
obj1.a = 2;
console.log(obj2); // Output: { a: 2}
원본 객체의 변경을 피하려면 얕은 복사 또는 깊은 복사를 이용해 새로운 객체를 만들어 조작하면 됨.
참조 값에는 Object, Array, Function 등이 있음.