[코어 자바스크립트] 01. 데이터 타입 - 1

devmin24·2021년 7월 22일
0

책으로 공부한 걸 복습하는 차원에서 정리하며 글을 써보기로 했다.
가끔은 책으로 공부하는 것도 정제된 내용을 순차적으로 공부할 수 있어 좋은 점이 있다.


1. 데이터 타입의 종류

기본형 : 숫자(Number), 문자열(String), 불리언(Boolean), Null, Undefined, Symbol 등

참조형 : 객체(Object)
➡️ 객체의 하위 분류 : 배열(Array), 함수(Function), 날짜(Date), 정규표현식(RegExp), Map, WeakMap, Set, WeakSet 등

기본형과 참조형의 구분점
기본형은 값이 담긴 주솟값을 바로 복제하고, 참조형은 값이 담긴 주솟값들로 이루어진 묶음을 가리키는 주솟값을 복제한다는 점이 다르다.

기본형은 불변성(=변하지 않는다)을 띈다. 불변성을 잘 이해하기 위해 살짝의 메모리와 데이터에 대한 지식을 공부해보자.

1-1. 메모리와 데이터

비트(bit) : 0과 1만을 표현할 수 있는 하나의 메모리 조각, 각 비트는 고유한 식별자를 통해 위치를 확인할 수 있다.
바이트(byte) : 1바이트 = 8비트, 총 256개의 값을 표현할 수 있다.

모든 데이터는 바이트 단위의 식별자, 메모리 주솟값을 통해 서로 구분하고 연결할 수 있다.


2. 변수

변수 : 변경 가능한 데이터가 담길 수 있는 공간 또는 그릇. 숫자, 문자열, 객체, 배열 등 모든 것이 데이터에 해당된다.
식별자 : 어떤 데이터를 식별하는 데 사용하는 이름. = 변수명

2-1. 변수 선언할 때 메모리 영역의 작업 과정

var a;
a = 'abc';

var a = 'abc'; // 코드는 달라도 자바스크립트 엔진은 결국 같은 동작을 수행.

a라는 이름의 변수 메모리에 데이터 'abc'를 직접 저장하는 것이 아니라, 별도의 메모리에 데이터 'abc'를 저장하고 그 주소를 변수 a의 메모리에 저장하는 방식으로 이뤄진다.

글만으로는 이해가 부족할 수 있으니 표로 확인해보자.

주소100101102103...
데이터이름 : a
값 : @201

주소200201202203...
데이터'abc'
  1. 빈 공간 @100을 먼저 확보한다.
  2. 확보한 공간의 식별자를 a로 지정한다.
  3. 데이터 영역의 빈 공간 @201에 문자열 'abc'를 저장한다.
  4. a라는 식별자(@100)를 검색하고, 앞서 저장한 문자열의 주소(@201)를 @100의 공간에 대입한다.

이렇게 번거로운 단계를 거치는 이유는 데이터 변환을 자유롭게 할 수 있게 함과 동시에 메모리를 더욱 효율적으로 관리하기 위한 고민의 결과이다

여기서, 'abc'의 마지막에 'def'를 추가한다고 해보자.
기존의 문자열 'abc'가 담긴 @201에 'abcdef'로 변경하여 할당하는 것이라고 생각할지도 모른다.. (나도 그랬다)
하지만 틀렸다. 새로운 별도의 공간에 'abcdef'라는 문자열을 새로 만들어 저장하고 그 주소를 @100에 대입한다. 기존 문자열에 어떠한 변환을 가하든 상관 없이 무조건 새로 만들어 별도의 공간에 저장한다. 이 때, 그 전 데이터는 자신의 주소를 저장하는 변수가 하나도 없게 되면 가비지 컬렉터의 수거 대상이 된다.

주소100101102103...
데이터이름 : a
값 : @201 -> @203으로 변경

주소200201202203...
데이터'abc''abcdef'

여기서 또 한번 정확하게 느낄 수 있다. 번거롭다고 생각할 지 몰라도, 이렇게 분류하여 저장한다면 중복된 데이터에 대한 처리 효율이 높아진다.

오늘의 느낀 점

첫 장에서 왜 이렇게 번거롭게 데이터를 관리할까? 라고 성급하게 생각한 나 자신을 반성한다.
이제보니 너무 효율적인 방법이였다!

profile
꾸준함, 열정 한 가득 챙겨 끝없는 목표를 향해 달려가는 개발자👩‍💻

0개의 댓글