업데이트:

배열이란?

배열은 1개의 변수에 여러 개의 값을 순차적으로 저장할 때 사용하는 자료구조이다.

const arr = ['one', 'two', 'three']

arr[0] // 'one'
arr[1] // 'two'
arr[2] // 'three'

arr.length // 3
  • 요소 : 배열이 가지고 있는 값 - ‘one’, ‘two’, ‘three’
  • 인덱스 : 배열에서 자신의 위치를 나타내는 정수값. 0부터 시작한다.
  • length 프로퍼티 : 배열의 길이, 요소의 개수를 나타낸다.

📌 배열은 객체이다. 일반 객체와의 차이점은 객체와 달리 값의 순서length 프로퍼티를 가진다는 것이다.

값의 순서와 length 프로퍼티를 가지기 때문에 for문을 활용하여 순차적으로 요소에 접근할 수 있는 것이다.

자바스크립트 배열은 배열이 아니다.

📌 자바스크립트의 배열은 일반적인 배열의 동작을 흉내 낸 특수한 객체이다.

자바스크립트에서 배열은 다른 언어의 자료구조 배열과는 의미가 다르다.

자바스크립트의 배열의 요소를 위한 각 메모리 공간은 동일한 크기를 갖지 않아도 되고, 연속적으로 이어져 있지 않을 수도 있다.

이렇게 배열의 요소가 연속적으로 이어져 있지 않은 배열을 희소 배열이라고 한다.

🔍 일반 배열과 자바스크립트 배열의 장단점

  장점 단점
일반 배열 인덱스로 빠르게 접근 가능 요소 삽입/삭제에 비효율
자바스크립트 배열 요소를 삽입/삭제하는 경우 일반 배열보다 2배 빠른 성능 해시 테이블로 구현된 객체라서 인덱스로 접근하면 일반 배열보다 느림.

length 프로퍼티와 희소 배열

length 프로퍼티에 임의의 숫자 값을 명시적으로 할당할 수도 있다.

const arr = [1, 2, 3, 4, 5];

arr.length = 3;

console.log(arr); // [1, 2, 3]

arr.length = 7;

console.log(arr); // [1,2,3, empty * 4]

위처럼 배열의 길이보다 작은 값을 할당하면 배열의 길이가 줄어들기도 한다.

배열의 길이보다 큰 값을 할당하면 배열에는 변함이 없고 length 프로퍼티 값만 변경된다.

📌 희소 배열은 length와 배열 요소의 개수가 일치하지 않는다.

그리고 희소 배열은 언제나 length가 희소 배열의 실제 요소 개수보다 크다고 한다.

자바스크립트에서 희소 배열을 허용하지만 사용하지는 않는 것이 좋다.

연속적이라는 배열의 기본적 개념과도 맞지 않고 성능에도 좋지 않기 때문이다.

맺음말

배열마저 객체라니 자바스크립트에서 객체의 변신은 무궁무진한것 같다..

그리고 이 파트에는 엄청나게 많은 배열 메서드들이 등장한다.

알고리즘 문제를 풀 때나 배열로 값을 다룰 때 유용하게 쓰일 것 같아 메서드 파트는 종류별로 따로 정리하여 포스팅 해봐야겠다 ✏

댓글남기기