JS의 배열 = 동적 배열 (Array List)

Jit Hoon·2023년 8월 8일

Data structure

목록 보기
2/3

JS 배열

JS 배열은 리스트 형태의 고수준 객체로,
기본 배열의 단점을 보완한 동적 배열이다.

JS 배열의 특징

1. 동적 배열 (Array List) 이다.

  • 동적 배열은 기본 배열의 단점을 보완한 자료구조로,
    기본적으로 배열로 구현되기에 배열이 가지는 특징을 그대로 가진다.

  • 초기에 고정된 크기를 할당받으며 생성되고,
    초기에 지정한 크기를 넘어서면 동적으로 크기를 늘린다.

  • 각 원소의 인덱스가 연속적이지 않아도 되고,
    원소들 사이에 빈자리(undefined)가 있어도 된다.

2. 리스트 형태의 고수준 객체이다.

  • 자바스크립트 배열의 인덱스는 property 이름인데 정수인 것이다.
    자바스크립트는 사용자가 명시한 숫자 배열 인덱스를 문자열 형태로 바꿔서 프로퍼티 이름으로 사용한다.

    모든 인덱스 값은 프로퍼티 이름이지만, 프로퍼티 이름은 0과 2의32승-1 사이의 정수여야만 인덱스가 될 수 있다.

    일반적으로 자바스크립트 배열은 객체 프로퍼티를 통해 원소에 접근하는 것보다, 정수 첨자를 통해 원소에 접근하는 것이 훨씬 빠르도록 최적화 되어 있다.

  • 내부적으로 pointer를 사용하여, 연결 리스트의 장점도 가진다.
    즉, pointer가 다음 데이터의 위치를 가리킨다는 점에서 삽입과 삭제가 간편하다.

  • 배열은 Array.prototype 의 프로퍼티들을 상속받는다.

3. 배열 혹은 스택의 기능으로 사용할 수 있다.

  • 큐의 기능을 제공하지 못한다.

JS 배열 구현

1. JS 배열 생성

// 리터럴 방식의 일반 배열

let arr = [];

arr.push(1);
arr.push('2');

// 배열 객체 직접 생성
let arr new Array();

arr.push(1);
arr.push('2');

// Array.from(크기 조건, 콜백 함수)

// 원하는 값을 가지면서 임의의 크기를 가지는 배열 (1차원)
let arr = Array.from({ length: 5 }, () => 7); // [7, 7, 7, 7, 7]

// 원하는 값을 가지면서 임의의 크기를 가지는 배열 (2차원)
let arr = Array.from(Array(4), () => new Array(5));

/*

[
	[5 empty items],
	[5 empty items],
	[5 empty items],
	[5 empty items]
]

*/

// 반복문을 이용한 배열 초기화
let arr = new Array(3);

for(let i = 0; i < arr.length; i++){
	arr[i] = Array.from({ length: 4 }, (undefined, j) => i * 4 + j);
}

/*

[
	[0, 1, 2, 3],
	[4, 5, 6, 7],
	[8, 9, 10, 11]
]

*/

// 배열의 크기 임의 변경
let arr = [0, 1, 2, 3 , 4];
arr.length = 8;
arr[7] = 3;
arr.push(1);

arr // [0, 1, 2, 3 , 4, undefined, undefined, 3, 1]

for (let x of arr) {
	console.log(x);
}

2. JS 배열 주요 메서드

// .concat() : 여러 개의 배열을 이어 붙여서 합친 결과를 반환. O(N)
let arr1 = [1, 2, 3, 4, 5];
let arr2 = [6, 7, 8, 9, 10];
let arr = arr1.concat(arr2, [11, 12], [13])

arr // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]

// .slice(left, right) : 특정 구간의 원소를 꺼낸 배열을 반환. O(N)
let arr = [0, 1, 2, 3, 4];
let result = arr.slice(2, 5);

result // [2, 3, 4]

// indexOf() : 특정한 값을 가지는 원소의 첫째 인덱스를 없으면 -1 반횐. O(N)
let arr1 = [1, 2, 3, 4, 5];

arr.indexOf(2); // 3
  • delete의 경우, 해당 원소에 undefined 값을 할당하는 것과 의미가 비슷하다.

    원소가 지워지더라도 생기는 공백을 다른 원소가 대신하지 않으며, 해당 배열은 희소배열이 된다.

2-1. JS 배열 주요 메서드 별 시간 복잡도


참고 자료

profile
최지훈_FE_최최최최종.log

0개의 댓글