프론트엔드 기본개념 복습/Javascript

[Javascript] 자바스크립트의 배열 (Array)

콘요맘떼 2022. 3. 1. 19:36

자바스크립트의 배열 (Array of Javascript)

  자바스크립트의 배열은 사실 우리가 아는 일반적인 배열이 아니다. 자바스크립트의 배열은 해시 테이블로 구현된 객체이며 요소들끼리 메모리상으로 나란히 위치하지도 않는다. 배열을 생성한 후 typeof를 통해 그 타입을 출력하면 'object'가 반환됨을 확인할 수 있다. 또한 객체의 모든 프로퍼티들에 대한 정보를 보여주는 Object.getOwnPropertyDescriptor( ) 메소드를 활용하면 자바스크립트의 Array는 인덱스와 length를 프로퍼티 키로 가지는 Object임을 확인할 수 있다.

 

 

  그렇기 때문에 자바스크립트 객체에 들어가는 요소들은 서로 연속되어 위치하지도 않으며 서로 동일한 타입이 들어가지 않아도 된다. (파이썬의 list와 마찬가지이다. 하나의 배열 안에 어떤 데이터든 넣을 수 있다.) 이처럼 배열의 요소들이 차지하는 메모리 공간도 일정하지 않고 서로 연속적으로 위치하지도 않는 배열을 희소 배열(sparse array)라고 부른다. 자바스크립트의 배열은 메모리 상의 위치를 통해 인덱싱 개념을 구현한 것이 아니기 때문에 인덱스를 통한 데이터 접근에는 일반적인 배열에 비해서 부족한 성능을 보인다. 대신 삽입, 삭제, 혹은 특정 데이터의 탐색에는 뛰어난 성능을 보인다는 특징을 가진다.

  반면 배열 내 모든 요소들이 동일한 크기를 가지며 서로 연속적으로 위치한 배열을 밀집 배열(dense array)이라고 부른다. 밀집 배열은 인덱스를 통한 데이터 접근에 뛰어난 성능을 보이며 메모리의 측면에서도 보다 효율적인 모습을 보여준다. 자바스크립트에서도 이러한 밀집 배열의 장점을 가져오기 위해 배열 요소들의 타입이 지정된 타입 배열(typed array)이 등장하였다. 타입 배열은 Int, Unsigned Int, Float 등의 자료형에 대한 고정 타입 배열을 제공한다. 또한 최근에는 배열의 요소가 모두 동일한 타입이면 연속적으로 메모리를 할당하는 기능 역시 구현되었다.