자바스크립트의 데이터 종류에는 크게 두가지로

기본형과 참조형 데이터가 있다.

 

기본형 데이터

 

string

number

boolean

undefined

null

ES6 부터 추가된 symbol

 

 

기본형 데이터는 불변성인데

불변성이라는것은 한번 만든 데이터의 값은 다른 값으로 변경할 수 없는 것을 말한다.

만약 기본형 데이터가 변경된다면 그건 데이터를 아에 새로 만드는 동작이고,

한 번 만들어진 값은 가비지 컬렉팅(GC)을 당하지 않는 한 영원히 변하지 않는다.

기본형 데이터는 재할당시 기존 값이 달라지는 것처럼 보이지만,

기존의 값이 달라지는 것이 아닌 새로운 데이터 영역에 재할당한 값을 저장하고,

재할당한 주소값을 변수영역에 연결해주는 것이다.

결국 기존의 데이터 영역이 변하는 것이 아니고 새롭게 재할당한 데이터 영역이 생기는 것이다.

 

 

참조형 데이터

 

array

object

function

 

배열과 객체, 그리고 함수가 대표적이며,

참조형 데이터는 객체의 변수 영역이 별도로 존재한다.

이 변수 영역에는 얼마든지 다른 값을 대입할 수 있다. 이 부분 때문에 흔히 참조형 데이터는

가변적이라고 말한다. 하지만 여기서 ‘가변’은 참조형 데이터 자체를 변경할 경우가 아니라

내부의 프로퍼티를 변경할 때만 성립한다는 것을 알아야한다.

 

 

 

 

기본형데이터와 참조형데이터의 차이점?

 

 

대부분의 책에서는 ‘기본형은 값을 복사하고 참조형은 주솟값을 복사한다’고

설명하지만 사실은 모든 데이터타입은 변수에 할당하기 위해서 주솟값을 복사해야하기때문에,

엄밀히 따지면 자바스크립트의 모든 데이터 타입은 참조형 데이터일 수밖에 없다.

다만 기본형은 주솟값을 복사하는 과정이 한 번만 일어나고, 참조형은 한 단계를 더 거치게 된다는 차이가 있다.

 

 

 

 

기본형데이터는 불변성으로 한번 만든데이터는 가비지 컬렉팅을 당하지 않는 한 영원히 변하지 않는다.
참조형데이터는 객체의 내부 프로퍼티를 변경할때는 가변성으로 객체의 변수 영역이 별도로 존재한다.

 

 

복사했습니다!