들어가며
많은 기업들이 타입스크립트와 nest.js를 활용해서 서버 개발을 하곤 합니다. 취업을 하려면, 타입스크립트와 nest.js를 공부해서 실무를 익히는 것이 중요할 것입니다. 하지만 아직 자바스크립트의 기초도 없는 상태에서 타입스크립트와 nest.js를 공부하는 것이 맞을까 하는 생각이 들었습니다. 빠르게 기술변화를 적응하고, 러닝 커브를 줄이기 위해 빠르게 공부해야 하는 것도 맞겠지만, 그전에 언어의 기반이 되는 자바스크립트부터 제대로 알아야 하지 않을까 하는 생각이 들었습니다. 이 기회에 자바스크립트의 기본에 대해 정리해보고자 합니다.
데이터 타입의 종류
자바스크립트의 데이터 타입에는 크게 두 가지가 있습니다. 바로 기본형과 참조형입니다. 기본형에는 숫자, 문자열, 불리언, null, undefined 등이 있으며, ES6에서는 Symbol이 추가됐습니다. 참조형은 객체(object), 배열(Array), 함수(Function), 날짜(Date), 정규표현식(RegExp) 등과 ES6에서 추가된 Map, WeakMap, Set, WeakSet 등이 객체의 하위분류에 속합니다.
여기서 기본형과 참조형은 어떤 기준으로 구분하는 것일까요? 여기서 기본형은 값이 담긴 주솟값을 바로 복제하는 반면 참조형은 값이 담긴 주솟값들로 이루어진 묶음을 가리키는 주솟값을 복제한다는 점이 다릅니다. 여기서 기본형은 불변성이라는 특징이 있습니다. 불변성을 잘 이해하려면 메모리와 데이터 개념을 잘 이해해야 합니다.
그렇다면, 메모리와 데이터의 기본 지식에 대해 살펴보겠습니다.
메모리와 데이터
컴퓨터는 모든 데이터를 0 또는 1로 바꿔 기억하며 이 하나의 메모리 조각을 비트라고 합니다. 메모리는 매우 많은 비트들로 구성돼 있는데, 0이나 1만 표현할 수 있는 비트를 몇 개씩 묶어 하나의 단위로 여긴다면 표현할 수 있는 값도 늘어나면서 동시에 검색 시간을 줄일 수도 있을 겁니다. 이런 고민의 결과로 바이트라는 단위가 생겼습니다. 1바이트는 8개의 비트로 구성돼 있는데, 1비트마다 0 또는 1의 두 가지 값을 표현할 수 있으므로 1바이트는 총 256개의 값을 표현할 수 있습니다. 2바이트는 비트 16개이므로 65536 개의 값을 표현할 수 있습니다.
C/C++, 자바 등의 정적 타입 언어는 메모리의 낭비를 최소화하기 위해 데이터 타입별로 할당할 메모리 영역을 2바이트, 4바이트 등으로 나누어 정해놓았습니다. 예를 들어, 2바이트 크기의 정수형 타입(short)은 0을 포함해 -32768 ~ +32767의 숫자만 허용합니다. 만약 사용자가 +32768 또는 그 이상의 숫자를 입력하면 오류가 나거나 잘못된 값이 저장되고 맙니다. 이 문제에 제대로 대처하기 위해서는 사용자가 직접 4바이트 크기의 정수형 타입(int) 등으로 형 변환을 해야 합니다.
하지만 메모리 용량이 과거보다 월등히 커진 상황에서 등장한 자바스크립트는 상대적으로 메모리 관리에 대한 압박에서 자유로워졌습니다. 그래서 숫자의 경우 정수형인지 부동소수형인지를 구분하지 않고 64비트, 즉 8바이트를 확보합니다. 덕분에 개발자가 위와 같은 형 변환을 걱정해야 하는 상황이 훨씬 덜 발생하게 됐습니다.
지금까지 비트에 대해 알아봤는데, 각 비트는 고유한 식별자를 지닙니다. 그리고 바이트 역시 시작하는 비트의 식별자로 위치를 파악할 수 있을 것입니다. 모든 데이터는 바이트 단위의 식별자, 더 정확하게는 메모리 주솟값을 통해 서로 구분하고 연결할 수 있습니다.
다음 시간에는 메모리 주솟값을 활용해서 변수의 선언과 데이터 할당이 어떻게 이루어지는지 살펴보겠습니다.
마치며
자바스크립트의 기본에 대해 공부하면서, 기본도 정확하게 알지 못하고, 앞으로 나아가려 했구나 하는 생각이 들었습니다. 기초이기에 지금 공부하는 내용을 더 잘 이해해야겠다고 생각했습니다. 기본에 충실할 수 있는 개발자가 되고 싶습니다.
출처
'JavaScript > 코어 자바스크립트' 카테고리의 다른 글
[자바스크립트] 실행 컨텍스트란? (feat 코어 자바스크립트) (1) | 2021.09.24 |
---|---|
[자바스크립트] undefined와 null (feat 코어 자바스크립트) (0) | 2021.09.16 |
[자바스크립트] 불변 객체 (feat 코어 자바스크립트) (0) | 2021.09.13 |
[자바스크립트] 기본형 데이터와 참조형 데이터 (feat 코어 자바스크립트) (0) | 2021.09.04 |
[자바스크립트] 변수 선언과 데이터 할당 (feat 코어 자바스크립트) (1) | 2021.09.01 |