2023. 5. 24. 15:26ㆍFront-end/Javascript
Data type은 크게 기본형(primitive type)과 참조형(reference type)으로 나뉜다.
나뉘는 기준은 값의 저장방식과 불변성 여부로 나뉘는데 그건 뒤에서 자세히 알아보자
기본형엔 문자열(string), 숫자형(Number), 참과 거짓인 불리언(Boolean), null과 undefined그리고 symbol이 있다.
참조형은 말 그대로 어떤 걸 바라보고 있다는 뜻이고 크기가 큰 특징이 있다. js에선 참조형은 객체(object)로 이루어져 있는데 대표적으로 배열(array), 함수(function), Date, Map/Set 이 있다.
기본형 데이터타입은 값이 담긴 주소값을 바로 복제하고, 메모리 관점에서 불변성을 띈다. 이에 대해서도 뒤에서 자세히
참조형은 값이 담긴 주소값들로 이루어진 묶음을 가리키는 주소값을 복제하고 불변성을 띄지 않는다.
이러한 타입별 저장방식과 메모리 관점에서 불변성과 가변성을 이해하려면 컴퓨터의 메모리와 데이터에 대해서 알아야한다.
먼저 비트(bit)는 컴퓨터가 이해할 수 있는 가장 작은 단위로 0과 1이다.
바이트(byte)는 컴퓨터가 비트단위의 메모리를 모두 찾기는 비효율적이기 때문에 만들어진 비트 8개로 이루어진 새로운 단위이다.

메모리는 byte 단위로 구성되고, 모든 데이터는 byte 단위의 식별자인 메모리 주소값을 통해 구분한다.
만약 메모리에 8개의 byte로 이루어진 데이터가 저장되면 64bit의 데이터가 저장된 것이다.
기본형 데이터의 저장방식에 대해 알아보자

위와 같은 string데이터가 있다고 할 때
데이터 값을 바로 저장하는 게 아니라 다른 곳에 저장하고 그 주소를 데이터 값에 저장한다.
왜? 데이터 변환에 용이하고 메모리를 효율적으로 관리하기 위해서
그렇다면 참조형 데이터 메모리 저장방식을 보자

obj라는 객체의 데이터는 메모리에서 변수영역과 데이터영역 그리고 객체의 별도 공간에 나눠 저장된다.
먼저 객체 속 value 값이 데이터 영역의 메모리에 저장되고 객체 별도의 공간에 key값이 식별자로, 데이터 부분엔 데이터 영역에 저장된 메모리 주소 값이 들어간다.
그리고 변수영역에 할당된 메모리의 데이터 값엔 객체 별도의 메모리에 저장된 값의 주소값이 들어가게 된다.
만약 데이터를 수정하게 되면?
기본형 데이터의 경우 수정을 하게 되면 메모리의 새로운 영역에 값이 입력되고 그 주소값이 변수 영역에 저장된다.
기존 데이터(데이터영역에 저장돼 있던 값)가 변경되는 것이 아닌 새로운 데이터가 만들어져 변수영역에 주소값이 갈아끼워지는 것이기 때문에 불변하다고 할 수 있다.
undefined & null
두 가지 타입 모두 비어있는 것을 나타내는데
undefined은 변수에 값이 저장되지 않은 경우, 데이터 영역의 메모리 주소를 지정하지 않은 식별자(변수명)에 접근할 때, 함수에서 return값이 없는 경우 나오게 된다.
하지만 null은 비었다, 없다는 걸 명시적으로 표현할 때 부여한다.
※ typeof 로 null을 검사했을 때 Object 타입으로 나오는 버그가 존재한다.
'Front-end > Javascript' 카테고리의 다른 글
| javascript 실행 컨텍스트, 콜스택, 호이스팅 (0) | 2023.05.25 |
|---|