데이터 타입의 종류 및 메모리
자바스크립트 엔진이 코드(변수, 함수 등)를 어떻게 저장하고 실행하는지에 대한 메커니즘
1-1. 기본형(Primitive type)
Number, String, Boolean, null, undifined, Symbol(ES6에서 추가)
1-2. 참조형(Reference type)(기본형에 비해 상대적으로 크다.)
Object(Array, Function, Data, RegExp, Map, WeakMap, Set, WeakSet)
모두 Object의 하위요소로 분류된다.
※ 기본형과 참조형을 나누는 기준은 '값의 저장 방식'과 '불변성 여부'이다.
1) 복제의 방식
a. 기본형: 값이 담긴 주소값을 바로 복제
b. 참조형: 값이 담긴 주소값들로 이루어진 묶음을 가리키는(참조하는) 주소값을 복제
2) 불변성의 여부 (여기서 불변은 데이터의 변경 가능성이 아닌 메모리 주소의 변경 가능성이다.)
a. 기본형: 불변성을 띔
b. 참조형: 불변성을 띄지 않음
2-1. 메모리, 데이터
a. 비트
컴퓨터가 이해할 수 있는 가장 작은 단위
0과 1을 가지고 있는 메모리를 구성하기 위한 작은 조각
b. 바이트
0과 1만 표현하는 비트를 8개 묶어 1바이트가 된다.
바이트로 메모리에 고유한 주소값을 부여한다.
c. 메모리
모든 데이터는 byte 단위의 식별자인 메모리 주소값을 통해서 서로 구분된다.
d. JS의 메모리 관리 방식은 java, c와는 다른다.
java, c는 변수형을 저장할때 그 변수의 크기까지도 개발자기 직접 지정해줘야하는 경우가 있다.
(ex 정수형)
JS의 경우: let a = 8 (8byte)
java의 경우:
1) byte a = 8 (byte로 선언하면 1byte를 차지한다.)
2) short a = 8 (short로 선언하면 2byte를 차지한다.)
3) int a = 8 (int로 선언하면 4byte를 차지한다.)
4) long a = 8 (long으로 선언하면 16byte를 차지한다.)
java가 처음 나왔을 당시 지금처럼 메모리가 넉넉하지 않았기 때문에 모든 변수를 선언하면 메모리 문제가 발생할 수도 있었기 때문에 이런 방식이 쓰였다.
하지만 javascript는 java만큼 메모리의 크기까지도 고려할 정도는 아니다