JavaScript 배열 (Array)

Jun 2k (Jun2)·2023년 9월 22일

자료구조&알고리즘

목록 보기
4/19

배열

연관된 데이터를 연속적인 형태로 구성한 구조이다.
배열에 포함된 원소는 순서대로 번호(index)가 부여된다.

출처: 이선협 강사님 데브코스 강의자료

배열의 특징

  • 고정된 크기를 가지며 일반적으론 동적으로 크기를 늘릴 수 없다.
    => 하지만 JavaScript처럼 대부분 스크립트 언어는 동적으로 배열 크기를 조절할 수 있다.
  • 원하는 원소의 index을 알고 있으면 O(1) 시간복잡도로 원소를 찾는 것이 가능하다.
    => 출석부에서 번호를 부르면 이름을 바로 알 수 있는 것에 비유
  • 원소를 삭제하면 해당 index에 빈자리가 생긴다.
    => 학생이 전학을 가면 해당 번호 자리는 그대로 남는 것과 같음

배열 요소 삭제

한 요소를 삭제하더라도 해당 index 자리는 유지된다.
따라서 나머지 요소들을 한 자리 씩 당겨줘야 한다.
결과적으로 삭제 후 순서를 맞추려면 최대 O(n)의 시간복잡도가 소요된다.

배열 요소 추가

한 요소를 추가하기 위해서 해당 index 뒤에 있는 값들을 한 자리 씩 밀어낸다.
이후 해당 index에 요소를 추가해야 한다.
결과적으로 중간에 요소를 추가하려면 최대 O(n)의 시간복잡도가 소요된다.

따라서 추가삭제가 반복되는 로직이라면 배열 사용은 지양해야 한다.

JavaScript에서 사용법

배열 생성

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 타입이 아니라도 추가, 삭제가 가능하다.
단, 배열의 길이에는 영향을 주지 않는다.
=> 하지만 좋은 사용 방법은 아님

profile
유리프트 프론트엔드

0개의 댓글