본 내용은 책 모던 자바스크립트 Deep Dive 의 내용을 참조했습니다.
자바스크립트에는 7개의 데이터 타입이 있다.
데이터 타입을 왜 나눈것일까?
이유를 알기 위해서는 먼저 두 타입의 차이점을 확인해야한다.
원시값은 변경이 불가능한 값이다.
변경이 불가능하다는 것은 읽기전용 값이란 뜻이고
데이터의 신뢰성을 보장한다는 뜻이다.
그렇다면 흔히 변수에 값을 바꾼다는것 무슨뜻일까?
let x = 5 ;
x = 8 ;
console.log(x) // 8
변수는 데이터를 담는 그릇이다.
5 라는 숫자 자체는 원시값이기 때문에 변경할수 없다
따라서 8 이라는 값을 메모리에 새로 하나 만들고 주소값만 바꿔서 연결한다.
let x = 5 ;
let y = x ;
console.log(x,y); // 5 5
y = 7 ;
console.log(x,y); // 5 7
메모리 x 를 만들고 5를 담는다.
메모리 y 를 만들고 x의 값 5를 담는다.
x 와 y 는 서로다른 메모리기 때문에 한쪽값을 변경해도 다른쪽은 변화가 없다.
이것을 값의 의한 전달 영어로는 passed by value 라고 부른다.
원시값은 메모리가 매우 적은편에 비해 객체는 그크기가 매우 클수있고
일정하지도 않다. 따라서 객체를 변경하고 관리할때마다 새로 만들지 않고
변경이 가능하게끔 설계가 됬다.
문제는 새롭게 만들지 않고 메모리 자체의 값을 만지기 때문에 부작용이 있다는 것이다.
let user1 = {
age : 20
};
let x = user1;
console.log(x); //20
x.age = 5;
console.log(x); // 5
console.log(user1); // 5
원시값을 할당한 변수는 메모리주소를 따라가서 원시값 자체를 가져오지만.
객체를 할당한 변수는 메모리주소를 따라가서 참조값을 가져온다.
즉 객체 하나를 여럿이서 나눠쓰고 한쪽을 바꾸면 모두가 바뀐다 😦