자바스크립트 배열

정지훈·2020년 12월 8일
0

배열 vs 자바스크립트 배열

배열은 여러개의 값을 순차적으로 나열한 자료구조 입니다.
하지만 자바스크립트 배열은 배열이 아닙니다.

자료구조에서 말하는 배열은 동일한 크기의 메모리 공간이 빈틈없이 나열된 자료구조입니다.

하지만 자바스크립트 배열은 객체입니다.
어떤 값도 들어갈 수 있고 각 타입마다 크기가 동일하지 않습니다.

일반적인 배열은 선두 어드래스만 기억하면 길이를 지정해 그 길이만큼 공간을 찾아서 넣습니다. 그리고 하나의 데이터 타입으로 통일되어 있고 연속적으로 인접해 있어서 요소를 순회하는 것은 빠릅니다.

처음 메모리 주소가 1000이라면 다음 메모리 는 1000 + 1* 8(byte) 이런식으로 되어 있어서 매우 효율적이며 고속으로 동작합니다. 이렇게 밀집되어 있는 배열을 밀집배열입니다.

하지만 자바스크립트 배열은 한 타입만 넣을 수 있는게 아니라 여러 타입을 넣을 수 있고 객체기 때문에 length 프로퍼티 값을 변경 할 수도 있습니다.

그래서 동일하지 않고 요소 갯수 보다 길이가 길 수도 있는데 이것을 희소배열이라고 합니다.

자바나 C같은 언어의 경우 배열의 길이를 늘리거나 줄이려면 원본을 복사 후 길이를 조정해서 넣는 방식이지만

자바스크립트 배열은 length 프로퍼티를 늘리거나 줄이면 됩니다.

단. 줄이면 요소도 삭제 되고 늘리면 채워지는게 아니라 빈 요소가 되어 집니다.

밀집배열의 장점은 요소를 찾을때 동일한 크기니 빠릅니다.
하지만 추가나 삭제시 효율적이지는 않지만
희소배열 경우 찾을때는 시간이 걸리지만 추가나 삭제하는건 효율적이게 움직입니다.

배열 생성

객체와 마찬가지로 배열도 다양한 생성 방식이 있습니다.

배열 리터럴, Array 생성자 함수, Array.of, Array.from 이 있습니다.

배열 리터럴은 대괄호로 요소를 감싸서 만드는 방식이고 제일 편한 방식이고
Array 생성자 함수 식별자에 new Array()로 넣는 방식입니다.

하지만 전달된 인수가 정수로 1개일 경우 length 프로퍼티 값이 인수인 배열을 생성합니다.

이렇게 두가지 일을 하면 되게 안 좋을 수도 있기 때문에 생겨난 것은 Array.of입니다. Array.of()는 인수를 하나 넣어도 배열로 만들수 있습니다.

Array.from은 이터러블이나 유사배열객체를 배열로 만들어 줍니다.

배열로 참조하기 위해서는 대괄호 표기법을 사용합니다.

배열도 객체인데 왜 마침표 표기법을 사용하지 않는 이유는 식별자 네이밍규칙에 어긋낫기 때문입니다.

배열은 '0': 요소, '1' : 요소...이런 식으로 되어 있는데 마침표 표기법은 네이밍 규칙을 따르기 때문에 숫자가 앞에 있으면 네이밍 규칙에 어긋나기 때문입니다.

대괄호 표기법에서 숫자면 ''이것을 생략할 수 있어서 arr[0]이렇게 접근 합니다.

배열 메서드

배열에는 원본 배열을 변경하는 mutator method와 원본 배열을 변경하지 않고 새로운 배열을 생성하여 반환하는 accecssor method가 있습니다.

es3이전 배열 메서드는 mutator method였고 es5 이후는 대부분 배열 메서드가 accecssor method로 되어 있습니다.

배열 메서드는 다 외우면서 하면 더 좋지만 그러기엔 힘들기 때문에 그때 그때 찾아서 쓰는게 좋습니다.

출저: https://poiemaweb.com/fastcampus/array

0개의 댓글