연관된 데이터를 연속적인 형태로 구성한 구조이다.
출처: 이선협 강사님 데브코스 강의자료
배열에 포함된 원소는 순서대로 번호(index)가 부여된다.
한 요소를 삭제하더라도 해당 index 자리는 유지된다.
따라서 나머지 요소들을 한 자리 씩 당겨줘야 한다.
결과적으로 삭제 후 순서를 맞추려면 최대 O(n)의 시간복잡도가 소요된다.
한 요소를 추가하기 위해서 해당 index 뒤에 있는 값들을 한 자리 씩 밀어낸다.
이후 해당 index에 요소를 추가해야 한다.
결과적으로 중간에 요소를 추가하려면 최대 O(n)의 시간복잡도가 소요된다.
따라서 추가와 삭제가 반복되는 로직이라면 배열 사용은 지양해야 한다.
let arr1 = []; // 빈 Array 생성
console.log(arr1);
let arr2 = [1, 2, 3, 4, 5]; // 미리 초기화 된 Array 생성
console.log(arr2);
let arr3 = Array(10).fill(0); // 같은 값으로 많은 요소 배열로 초기화, fill
console.log(arr3);
let arr4 = Array.from({ length: 100 }, (_, i) => i); // 특정 로직 사용, from
console.log(arr4);

const arr = [1, 2, 3];
console.log(arr);
arr.push(4); // 오른쪽 끝에 4 추가, O(1)
arr.push(5, 6, 7); // 여러 개 추가 가능
console.log(arr);
// 2번째 인덱스에 119 추가
arr.splice(2, 0, 119); // O(n)
console.log(arr);
// 2번쨰 인덱스 값 제거
arr.splice(2, 1); // O(n)
console.log(arr[2]);

자바스크립트의 배열은 근본적으로 객체(Object) 타입이다
따라서 배열은 HashMap에 가까운 형태이며
index가 number 타입이 아니라도 추가, 삭제가 가능하다.
단, 배열의 길이에는 영향을 주지 않는다.
=> 하지만 좋은 사용 방법은 아님