데이터타입 (원시타입) 메모리 할당에대해서 알아보자

Undefined 기술블로그 ·2020년 11월 10일
0

javascript기초

목록 보기
8/9

자바스크립트의 데이터타입에 대해 알아볼까?

자바스크립트의 데이터 타입에는 크게 두 가지가 있다.

바로 기본형(primitive type)과 참조형(reference type) 두가지로 나뉘고

기본형에는 => 숫자, 문자, qnffldjs, null, undefined, 심볼(es6이후 추가) 있다.

참조형은 => 객체, 배열, 함수, 날짜, 정규표현식, es6추가된(Map, WeakMap, Set, WeakSet 객체 하위 부류에 속한다.

그렇다면 데이터타입이 두개로 나뉘는 기준은 무엇일까?

기본형 = 값이 담긴 주소값을 바로 복제한다
참조형 = 값이 담긴 주소값들로 이루어진 묶음을 가리키는 주소값을 복제한다

데이터를 저장할때 이런 차이점이 생긴다.

기본형은 불변성을 띄는데 불변성을 이해할려면! 메모리와 데이터에 대한 지식이 필요하다
'식별자'와 '변수'의 개념을 구분할 수 있어야한다.

데이터 타입에 관한 배경지식

컴퓨터는 0과 1로 바꿔 기억한다는걸 알고 있을것이다.
0또는 1만 표현할 수 있는 하나의 메모리 조각을 비트 라고 하고
메모리는 매우 많은 비트들로 구성돼 있는데 각 비트는 고유한 식별자 를 통해 위치를 확인할수 있다 .
하지만 0이나 1로만으로 표현할수있는 비트 단위로 위치를 확인하는 것은 매우 비효율적이다.
몇개씩 묶어 하나의 단위로 여긴다면, 표현할 수 있는 값도 늘어나면서 동시에 검색 시간을 줄일 수도 있다.
한편 매우 많은 비트를 한 다위로 묶는다면 검색시간은 줄일수 있고, 표현할수 있는 데이터의 개수도 늘어 나겠지만 동시에 낭비되는 비트도 생긴다.
사용되지않을 데이터를 표현하기 위해 빈 공간을 남겨놓기보다는, 표현 가능한 개수에 어느정도 제약이 따르더라도 크게 문제가 되지 않을 공간에 묶는 편이 낫다.
이런결과로

바이트라는 단위가 생겼다. 1바이트는 8개의비트로 구성되어있다.

1bit = 256개 (2의 8승)

2byte = 16bit이니 65536개 (2의 16승) 이렇게 값을 표현할수있는것이다.

놀랍지않는가? 메모리에 대해서 알기전, 이렇게 많은 수를 적용할수있다는 사실에 매우 놀라웠다 그리고,이제야 수많은 데이터를 처리할수있는 이유에 대해서 알게되는 시작점이었다.

오래전에는 메모리가 부족했던 때에는 0을 포함해 -32768 ~ +32767의 숫자만 허용했다

메모리가 부족했던 시절엔 불가피한 선택이었다니 .. 예전에는 어떻게 프로그래밍을 했단말인가...?

식별자와 변수

변수는 = 변할수 있는수, 값이 반드시 숫자여야 하진 않는다

식별자 = 어떤 데이터를 식별하는 데 사용 하는 이름을 뜻하며 변수명이된다.

변수 선언과 데이터 할당

어떻게 데이터를 저장하는지 동작 원리에 대해서 알아볼까 ?

자 이런형태로 값이 저장 될것같지만?

실제로는 이렇게 저장되지않는다 ..?

이렇게 저장이 된다 .

데이터를 바로 저장할것같지만 실은 데이터영역에다가 저장하고 그것을 참조시킨다

왜 ? 변수영역에 값을 직접 대입하지않고 번거롭게 한 단계를 더 거치는걸까?

이는 데이터 변환을 자유롭게 할수 있게 함과 동시에 메모리를 더욱 효율적으로 관리하기 위한 고민의 결과라한다. 만약 미리 확보한 공간 내에서만 데이터 변환을 할수 있다면 변환한 데이터를 다시 저장하기 위해선
변환된 데이터 크기에맞게 늘리는 작업을 먼저해야할것이다 .

그러니까 바뀔 데이터의 크기가 어느정도인지를 먼저 계산한후 확보하고 그리고난후 그곳에 저장해야한다는 말이다.

그런데 만약에 중간에 있는 데이터를 늘릴려고한다면? 중간을 잇는 뒤의 데이터를 전부 뒤로 옮기고 이동시킨 주소를 각 식별자에 다시 연결해줘야하는 상황이 발생할것이다. 그말은 즉 컴퓨터가 연산해야할 일이 많아지게 되는것! 얼마나..복잡한 일인가??
데이터의 크기가 어느정도로 들어올지 모르기때문에 변수와 데이터를 별도의 공간에 나누어 저장하는것이
최적의 상태가 되는것이다 ..

와 ...정말 프로그래밍을 만든사람은, 얼마나 머리가 똑똑한거지...?

이렇게 변수의 값을 다시 재할당하게된다면

새롭게 데이터 영역이 만들어지고 데이터를 가르키는 주소가 바뀌게 되는것이다.

메모리 할당의 동작원리를 보면서 많은걸 깨닫는 순간이었다..

내용이 다소길어지니

다음은 블로깅 내용에서는 참조형은 어떻게 이루어지는지 알아보도록하자 !!

profile
정의 되지 않은 유연한사람이 되고싶다.

0개의 댓글