배열이라면 여러 값들을 연속된 메모리 공간에 저장하고, 인덱스를 통해 사용할 수 있는 자료구조 형식이다.
인덱스라는 속성이 있기에 특정 값에 접근할 때(ex. Arr[0]) 시간 복잡도는 O(1) 이다.
따라서 매우 효율적인 데이터 접근이 가능하다.
하지만 우리가 사용하게 될 배열들은 가지런히 정렬되어있는 단순한 형태만 있지는 않을 것이다.
정렬되어있지않은 배열일 경우, n개의 데이터에서 원하는 데이터를 찾기 위해서는 선형 탐색을 해야한다.
이때의 시간 복잡도는 O(n)이 될 수도 있다.
오늘 다뤄볼 자바스크립트의 배열은 다른 언어에서의 배열과는 다르다.
배열 각 요소의 공간이 서로 동일하지 않을 수도 있고, 연속적으로 이어져있지 않을 수도 있다.
MDN 사전에서 알아본 바에 의하면, Javascript에서 사용하는 Array의 특징들은 다음과 같다.
(MDN Web Docs- Array - Javascript : https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array)
1. 다양한 데이터 형식을 혼합하여 저장할 수 있다.
2. 연관 배열이 아니다. 따라서 임의의 문자열을 인덱스로 사용하여 배열 요소에 접근할 수 없다.
음수가 아닌 정수를 인덱스로 사용한다.
3. 인덱스는 0에서 시작하며, 마지막 요소는 배열의 length 속성 값에서 1을 뺀 값에 위치한다.
4. 배열 복사 연산은 얕은 복사본을 생성한다.
위와 같은 특징을 갖고 있는 Javascript의 배열은 일반적 의미의 배열이 아니다.
Javascript 배열은 배열을 흉내낸 객체이다.
배열의 요소는 사실상 객체의 프로퍼티의 값이므로, 다른 언어에서와는 다르게 어떤 타입이라도 혼합하여 저장할 수 있는 것이다.
더불어 인덱스로 배열 요소에 접근하는 경우 구조적인 문제로 느린 성능을 가질수 있지만,
오히려 특정 요소를 탐색하거나 배열 요소를 삽입/삭제하는 경우에는 일반 배열보다 성능이 빠르다.