JS의 데이터타입에는 기본형(primitive type)
과 참조형(reference type)
이 있다.
기본형
: 숫자, 문자열, 불리언, null , undefined , 심볼참조형
: 객체, 배열 , 함수 , 날짜(date) , 정규식(RegExp) , Map, Set비트(bit)와 바이트(byte)
변수와 식별자
선언과 할당
시에는 데이터성질에 따라 변수영역 데이터영역으로 구분하여 메모리에 값이 저장된다.기본형 데이터
들은 모두 불변한다.
var a= 'abc';
a = a + 'def';
위와 같은 코드를 예시로 보면 a를 선언시 문자열을 a에 할당한다. 하지만 다음 코드에서
a에다가 문자열을 추가해 재할당한다.
어떻게 보면 값이 바껴서 불변이 아니라고 착각할 수 있지만,
두번째줄 ‘abcdef’라는 새로운 문자열을 만들어 주소에 저장하는 것이라서
첫번째 줄과 두번째줄의 데이터는 별개의 데이터이다.
즉 변경할 수가 없다는 얘기이다.
결국 한 번 만들어진 값은 가비지 컬렉팅
을 당하지 않는한 영원히 변하지 않는다.
참조형 데이터
들은 설정에 따라 가변값도 되고 불변값도 가능하다.
기본형 데이터와 다르게 객체의 변수영역
이 별도로 존재한다는 점이다.
변수의 개수를 참조카운트 라고 하며 참조카운트가 0인 메모리주소는 가비지 컬렉팅
의 수거 대상이 된다.
불변객체를 만드는법은 spread operator, Object.assign메서드 등을 활용하거나 deep copy 라이브러리인 immer.js 등을 쓰면 된다.