[TIL] 1. 데이터타입

💚💗 본문 내용은 코어자바스크립트를 참고하였습니다.


데이터 타입

  • 기본형 number, string , boolean, null, undefined ,symbol

  • 참조형 array, function, date, map , set

  • 메모리

매우 많은 비트들로 구성되어 있으며 고유한 식별자로 위치를 파악할수있다.

모든 데이터는 메모리 주소값을 통해 서로 구분하고 연결할수 있다.

변수선언

var a;

'변할수 있는 데이터를 만든다. 이 데이터의 식별자는 a로 한다.'

변수: 변경 가능한 데이터가 담길수 있는 공간[변할수 있는 데이터(문자열 ,객체 ,배열)]
식별자: 어떤 데이터를 식별하는데 사용하는 이름, 즉 변수명

데이터 할당

데이터를 할당할때 변수영역 ,데이터 영역으로 구분된다.

데이터를 변수영역이 아닌 데이터 영역에 저장한다

그 이유는 만약 미리 확보한 공간 내에서만 데이터 변환을 할수 있다면 변환한 데이터를 다시 저장하기 위해서 '확보된 공간을 변환된 데이터 크기에 맞게 늘리는 작업'이 선행 되어야한다 결국 효율적으로 문자열 데이터의 변환을 처리하기 위해 변수와 데이터를 별도의 공간에 나누어 저장하는 것이 필요하다.

불변값

변수와 상수를 구분하는 성질은 변경가능성이며, 변경가능성의 대상은 변수영역의 메모리이다.

변수공간에 다른데이터를 재할당할수 있는가 ?

기본형 데이터는 모두 불변값이다. 불변성 여부를 구분할 때의 변경 가능성의 대상은 데이터 영역의 메모리이다.

숫자나 문자열은 한번 만들어지면 다른값으로 변경 되지 않으며 이미 만들어 놓은 값
이 있을 경우에는 재활용 하고 없을 경우에는 새로 만든다.

예를들어) var a = 'abc' 일때 abc는 변수영역의 값에 저장되는 것이 아니라 데이터영역의 빈공간에 저장되고 그 주소값이 변수영역의 값에 저장된다. 또한 a에 'def'를 추가 할시 abc의 데이터영역을 수정하는 것이 아니라 다른 데이터영역에 'abcdef'를 새롭게 만든후 그 주소를 변수영역의 값에 저장한다. 그러므로 데이터 영역의 값은 변하지 않고 만약 없는 값이 있다면 새롭게 만든다.

  • 참조형 데이터의 할당

기본형 데이터와의 차이는 객체의 변수(프로퍼티) 영역이 별도로 존재한다는 점이다. 객체가 별도로 할애한 영역은 변수 영역일 뿐 '데이터 영역'은 기존의 메모리 공간을 그대로 활용하고 있다. 데이터 영역에 저장된 값은 불변값이지만 변수에는 다른 값을 얼마든지 대입 할수 있다 이부분 때문에 참조형 데이터는 가변 값이다라고 한다. (변수영역은 여러개가 있을수 있지만 데이터영역은 하나밖에 없다.)

객체는 변하지 않지만 객체 내부의 값은 변할 수 있다

garbage collector(가비지 컬렉터)

참조카운트 : 자신의 주소를 참조하는 변수의 개수
참조카운트가 0인 메모리는 메모리 사용량이 포화상태에 임박할때마다 수거되며 다시 새로운 값을 할당할 수 있는 빈 공간이 됩니다.

기본형도 결국 주소값을 참조하므로 모든 데이터 타입은 참조형이라고 할수있다.

변수 복사 이후 값을 변경했을때의 차이점(기본형, 참조형)


var a = 10;
var b = a ;
var obj1 = { c: 10, d: 'ddd'};
var obj2 = obj1;

b = 15;
obj2.c = 20;

a !== b
obj1 === obj2

객체의 변수값은 변경되지 않는다(불변) 하지만 객체의 프로퍼티 변수의 값(가변)은 따로 관리하고 있기때문에 변경 될수있다.

하지만 객체의 프로퍼티 값이 아니라 객체자체를 변경했을때는 새로운 공간에 새객체가 저장되므로 객체의 값은 달라진다.

객체는 불변값이므로 새로 만들어 주소를 할당해 주어야 한다.

좋은 웹페이지 즐겨찾기