[JS] 데이터 타입의 필요성

cabbage·2023년 6월 8일

JS

목록 보기
33/43
post-thumbnail

자바스크립트의 모든 값은 데이터 타입을 갖는다는 것만 알고 있었는데, 정확하게 그 이유를 모르고 있었다. 데이터 타입의 필요성에 대해 찾아본 결과 '모던 자바스크립트 Deep Dive' 책에서 그 이유를 알 수 있었다.

데이터 타입의 필요성

데이터 타입이 필요한 이유를 먼저 정리하자면 다음과 같다.

  1. 메모리에 값을 저장할 때 확보해야 할 메모리 공간의 크기를 결정하기 위해서이다.
  2. 메모리에서 값을 참조할 때 한 번에 읽어야 할 메모리 공간의 크기를 결정하기 위해서이다.
  3. 메모리에서 읽어 들인 2진수를 어떻게 해석할지 결정하기 위해서이다.

1. 메모리에 값을 저장할 때 확보해야 할 메모리 공간의 크기를 결정하기 위해서

먼저 1번 이유에 대해 먼저 알아보자.

메모리에 값을 저장하려면 우선 확보해야 할 메모리 공간의 크기를 결정해야 한다. 그 이유는 어느 정도 크기의(몇 바이트의) 메모리 공간을 사용해야 메모리 낭비 없이 값을 저장할 수 있는지 알아야 하기 때문이다. 자바스크립트 엔진은 값의 데이터 타입에 따라 정해진 크기의 메모리 공간을 확보한다. 즉, 변수에 할당하는 값의 데이터 타입에 따라 확보해야 할 메모리 공간의 크기가 결정된다.

let score = 100;
  • 숫자 값 100을 저장하기 위해 메모리 공간을 먼저 확보한 후, 확보된 메모리 공간에 숫자 값 100을 2진수로 저장한다.

결국 자바스크립트 엔진은 메모리 낭비 없이 값을 저장하기 위해 변수에 할당하는 값의 데이터 타입에 따라 메모리 공간을 확보하고, 확보된 메모리 공간에 값을 2진수 형태로 저장한다.

2. 메모리에서 값을 참조할 때 한 번에 읽어야 할 메모리 공간의 크기를 결정하기 위해서

다음으로 2번 이유에 대해 알아보자.

메모리에서 값을 참조하는 경우, 식별자를 통해 값이 저장되어 있는 메모리 공간의 주소를 찾아갈 수 있다. 정확하게는 참조하려는 값이 저장되어 있는 메모리 공간의 선두 메모리 셀의 주소를 찾아간다.

값을 훼손 없이 읽어 들이려면 값이 어느 정도 크기의 메모리 공간을 차지하고 있는지 알아야 한다. 따라서 값을 정확하게 읽어 들이기 위해서 메모리에서 한 번에 읽어 들일 메모리 공간의 크기를 알아야 한다.

  • 위 예제에서 score 변수에 저장된 값이 숫자 타입이므로 8바이트 단위로 읽어 들여야 한다. 그렇지 않으면 값이 훼손된다.
  • score 변수의 값은 숫자 타입이므로 자바스크립트 엔진은 score 변수를 숫자 타입으로 인식한다.
  • 숫자 타입은 8바이트 단위로 저장되므로 score 변수를 참조하면 8바이트 단위로 메모리 공간에 저장된 값을 읽는다.

심벌 테이블이라는 자료 구조를 통해 식별자를 키로 바인딩된 값의 메모리 주소, 데이터 타입 등을 관리한다. 심벌 테이블과 식별자를 통해 값이 저장된 메모리 공간의 선두 메모리 셀의 주소와 값의 데이터 타입을 알게 되면 훼손 없이 값을 정확하게 읽어 들일 수 있다.

결국 메모리에서 값을 참조할 때 한 번에 읽어야 할 메모리 공간의 크기를 결정하기 위해 데이터 타입이 필요하다. 데이터 타입이 없으면 값을 훼손 없이 읽어 들일 수 없다.

3. 메모리에서 읽어 들인 2진수를 어떻게 해석할지 결정하기 위해서

마지막으로 3번 이유에 대해 알아보자.

모든 값은 데이터 타입을 가지며, 메모리에 2진수로 저장된다. 메모리에 저장된 값은 데이터 타입에 따라 다르게 해석될 수 있다.

  • 메모리에 저장된 값 0100 0001은 숫자로 해석하면 65가 되지만 문자열로 해석하면 'A'가 된다.

위 예제에서 score 변수에 할당된 값은 숫자 타입의 값이다. 따라서 score 변수를 참조하면 메모리 공간의 주소에서 읽어 들인 2진수를 숫자로 해석할 수 있다.

결국 메모리에 2진수의 형태로 저장된 값을 그 값의 데이터 타입에 따라 해석해야 하므로 데이터 타입이 필요하다. 데이터 타입이 없으면 값을 원래의 값으로 해석할 수 없다.

정리

데이터 타입이 필요한 이유

  1. 메모리에 값을 저장할 때 확보해야 할 메모리 공간의 크기를 결정하기 위해서
  2. 메모리에서 값을 참조할 때 한 번에 읽어야 할 메모리 공간의 크기를 결정하기 위해서
  3. 메모리에서 읽어 들인 2진수를 어떻게 해석할지 결정하기 위해서
profile
캐비지 개발 블로그입니다. :)

0개의 댓글