개념
1. 역사
- 과거엔 데이터 저장소(메모리)의 용량이 제한되어 변수 하나에 하나의 원시 자료형 밖에 담을 수 밖에 없었음
- 띄어쓰기, 탭, 쉼표 등으로 데이터를 구분하여 배열과 비슷한 형태로 자료 구조를 구현(comma-separated values)했으나 보통 사이즈가 제한되어 번거로움
- 데이터의 크기가 동적으로 변하는 특별한 데이터 보관함의 필요성 대두
2. 원시타입(primitive type)
- 원시타입 : 고정된 저장 공간을 차지하는 데이터로 하나의 정보를 가지고있음
- 객체가 아니면서 method를 가지지 않는 6가지의 타입인 number, string, boolean, null, undefined가 해당
- 변수에는 데이터의 크기와는 관계 없이 하나의 데이터만 담을 수 있으며 값 자체에 대한 변경이 불가능(immutable)하지만 변수에 다른 데이터를 할당할 수 있음
let KKAKKA = "Cat!"
KKAKKA = "Black cat!"
const KKAKKA = 7;
KKAKKA = 42;
let KKAKKA = 7;
function changeAge(age) {
age = 26;
}
changeAge(KKAKKA)
console.log(KKAKKA)
3. 참조타입(reference type)
- 참조타입(주소 타입) : heap이라는 특별한 저장 공간을 사용하고 이 저장 공간이 유동적으로 늘어나며, 여러 개의 데이터를 가지고 있음
- 원시 자료형이 아닌 모든 것은 참조 자료형으로 배열, 객체, 함수가 대표적
- 데이터가 위치한 곳(메모리 상 주소)을 가리키는 주소가 변수에 저장되는 방식으로 변수의 주소를 참조하게 됨
let myArray = [1, 2, 3, 6];
let yourArray = myArray;
yourArray[3] = 4;
yourArray = undefined;
console.log(myArray)
console.log([1,2,3] === [1,2,3]);
console.log({ name: 'KKAKKA' } === { name: 'KKAKKA' });
원시타입과 참조타입의 차이
- 원시 자료형이 할당될 때에는 변수에 값(value) 자체가 담김
- 변수가 원시타입 데이터를 복사하면 데이터값이 복사되므로 기존 데이터에 영향이 가지 않음
let KKAKKA = 7;
let somin = KKAKKA;
somin = 26;
console.log(KKAKKA)
- 참조 자료형이 할당될 때는 보관함의 주소(reference)가 담기기 때문에 기존에 고정된 크기의 보관함이 아니라 동적으로 크기가 변하는 특별한 보관함을 사용할 수 있음
- 변수가 참조타입 데이터를 복사하면 주소가 복사되므로 복사한 데이터에서 원소 변경시 주소 안에 있는 데이터가 변경되어 기존 데이터에 영향이 감
let KKAKKA = { age: 7 };
let somin = KKAKKA;
somin.age = 26;
console.log(KKAKKA.age)