배열이란 여러 개의 값을 순차적으로 나열한 자료구조다. JS에는 배열 타입이 없으며, 배열은 객체 타입이다.
1. JS 배열은 배열이 아니다.
일반적인 자료구조에서 말하는 배열은 동일한 크기의 메모리 공간이 빈틈없이 연속적으로 나열된 자료구조이다.
하나의 데이터 타입으로 통일되어 있으며, 이런 배열을 밀집(dense) 배열이라 한다.
JS의 배열은 각각 동일한 메모리 공간을 가지지 않아도 되며, 연속적으로 이어져 있지 않을 수 있다.
이러한 배열 요소가 연속적으로 이어져 있지 않은 배열을 희소(sparse) 배열이라 한다. (기본적으로 해시테이블이다.)
- 밀집 배열은 인덱스로 요소에 O(1)로 접근이 가능하나, 삽입 삭제가 효율적이지 않다.
- 대부분 모던 JS 엔진은 좀 더 배열처럼 동작하도록 최적화하여 구현했다. 배열이 일반 객체보다 2배 정도 빠르다.
- 희소 배열 중 하나인 JS 배열은 해시 테이블로 구성된 배열로, 접근에서 밀집배열보다 느리지만 삽입 삭제가 더 빠르다.
- JS는 이 성능을 택했다.
JS 배열이라 해도, 최적화가 된 배열같은 해시 테이블이기 때문에 배열에는 같은 타입의 요소를 연속적으로 위치시키는 것이 최선이다.
'모던자바스크립트-DeepDive' 카테고리의 다른 글
7. 이벤트 (0) | 2024.10.03 |
---|---|
6. 브라우저의 렌더링 과정 (0) | 2024.10.03 |
4. 클로저 (0) | 2024.10.02 |
3. 실행 컨텍스트 (0) | 2024.10.01 |
2. this (0) | 2024.10.01 |