데이터 타입의 종류로는 크게 두가지로 나눌수 있습니다.
숫자(Number)
문자열(String)
불리언(Boolean)
null
undefined
심볼(Symbol)
객체(Object)
배열(Array)
함수(Function)
날짜(Date)
정규표현식(RegExp)
Map
WeakMap
Set
WeakSet
기본형 타입(Primitive Type)
기본형 타입의 종류에는 숫자, 문자열, 불리언, null, undefined, symbol이 있습니다.
일반적으로 기본형은 '할당이나 연산시 데이터가 복제'된다고 알려져있습니다.
기본형 타입의 메모리 저장 방식
*메모리 할당영역, 주솟값에 대한것은 이해를 돕기위한 개략적인 이미지들이 등장합니다.
메모리 할당 시 두 영역을 사용한다고 생각하면 쉽습니다.
식별자가 할당되는 변수 영역
변수 영역에는 식별자와 데이터 영역의 주솟값으로 이루거져있습니다.
데이터 영역에는 데이터가 담겨있습니다.
변수에 변수를 대입
단순히 정의만을 말하자면 '변하지 않는 성질'이라고 할 수 있습니다.
하지만 불변성이 해당하는 부분이 어디인지를 확실히 이해해야합니다.
불변성은 변수와 상수의 개념으로 말하는 것이 아닙니다.
변수와 상수는 변수 영역 메모리에 데이터 할당 후 재할당이 되는지에 대한 여부로 구분되는 것이며
불변성은 데이터 영역의 메모리에 대한 것 입니다.
불변성이 필요한 이유?
메모리 저장에 대한 이야기를 해보겠습니다.
메모리에 데이터를 저장하기 위해서는 메모리 공간을 선행으로 확보해야합니다.
불변성이 없다고 생각했을때,
처음 저장한 데이터의 크기보다 더 큰 데이터를 '재할당' 해야한다면 어떤일이 생길까요?
데이터 공간을 재확보해야하는 일이 생깁니다.
그리고 이 재확보작업을 하게되면 뒤에 저장된 메모리들의 공간이 뒤로 밀리는 현상이 생기고
이 현상으로 인해 각각의 주솟값들을 식별자에 다시 연결해야하는 작업이 발생할 수 있습니다.
위와 같은 이유로 불변성은 효율적으로 데이터를 저장하기 위해 생겼습니다.
참조형 타입(Reference Type)
참조형 타입의 종류는 객체,배열,함수,정규표현식,Map,weakMap,set,Weakset이 있습니다.
일반적으로 참조형은 '참조된다'고 알려져있습니다.
참조형 타입의 메모리 저장방식
위에서 데이터 영역은 불변하다고 말했던 것처럼 참조형 데이터도 데이터 영역은 불변합니다. 하지만 기본형 타입은 불변성을 띄고 참조형 타입은 불볂하지 않다(가변성)고들 말하는데, 그 이유에 대해 말씀드리겠습니다.
더 자세한 내용을 원하시면 https://okayoon.tistory.com/entry/%EC%BD%94%EC%96%B4-%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%EB%8D%B0%EC%9D%B4%ED%84%B0-%ED%83%80%EC%9E%85-%EA%B8%B0%EB%B3%B8%ED%98%95-%ED%83%80%EC%9E%85Primitive-Type%EA%B3%BC-%EC%B0%B8%EC%A1%B0%ED%98%95-%ED%83%80%EC%9E%85Reference-Type 들어가 주시면 감사하겠습니다.