이번 글은 아래 책의 일부를 읽고 난 다음, 책에는 언급되지 않은 부분에 대해 정리한 글입니다.
한 권으로 읽는 컴퓨터 구조와 프로그래밍: 더 나은 소프트웨어 개발을 위한 하드웨어, 자료구조, 필수 알고리즘 등 프로그래머의 비밀 노트
<aside> 💡
기본 데이터 타입 / 배열 / 비트맵 / 문자열 / 복합 데이터 타입 / 단일 연결 리스트 / 동적 메모리 할당 / 더 효율적인 메모리 할당 / 가비지 컬렉션 / 이중 연결 리스트 / 계층적인 데이터 구조 / 대용량 저장장치 / 데이터베이스 / 인덱스 / 데이터 이동 / 벡터를 사용한 I/O / 객체 지향의 함정 / 정렬 / 해시 / 효율성과 성능
</aside>
(276쪽) 프로그래머는 호수를 인덱스(첨자라고도 부른다)라고 부르고, 각각의 집을 원소라고 부른다. 일반적인 컴퓨터 개발 규정(프로그래밍 언어의 문법)에서는 배열 원소의 타입이 모두 같아야 한다고 정해져 있다.
이 부분을 읽자마자 JavaScript 무시하는 거 아냐? 라고 속으로 생각하며👊 정적 타입 언어/동적 타입 언어의 차이점을 다시금 되짚어 보기로 했습니다.
책에서 말하는 일반적인 컴퓨터 개발 규정이라함은, C, Java, C++ 같은 정적 타입 언어(statically typed languages)에서의 규칙. 하지만 JavaScript는 동적 타입 언어(dynamically typed language)라서 이 규칙이 적용되지 않습니다.
정적 타입 언어는 변수를 선언할 때 타입이 고정됩니다. 예: int
, float
, char
등. 배열도 예외가 아니고, 모든 원소가 같은 타입이어야 합니다.
int arr[3] = {1, 2, 3}; // OK
int arr[3] = {1, 2, "hello"}; // ❌ 오류 발생
동적 타입 언어는 변수나 배열 안의 원소 타입이 자유롭게 바뀔 수 있습니다.
let arr = [1, "hello", true, null]; // 모두 다른 타입이지만 OK
자바스크립트에서는 배열이 단순한 연속된 메모리 공간이 아니라, 사실상 객체(Object) 로 구현되어 있습니다.
즉, 배열 내부의 각 원소는 **값(value)**과 함께, 그 값이 어떤 타입인지는 자바스크립트 엔진이 런타임에 판단합니다.
<aside> 💡