🙄배열이란?
배열은 여러개의 값을 순차적으로 나열한 자료구조입니다.
배열이 가지고 있는 값을 요소(element)라고 부르며 자바스크립트의 모든 값은 배열의 요소가 될 수 있습니다.
배열은 자신의 위치를 나타내는 정수 index를 가지며 보통 index는 0부터 시작합니다.
🙄배열은 객체지만 일반 객체와 구별된다.
구분 | 객체 | 배열 |
구조 | 프로퍼티 키와 프로퍼티 값 | 인덱스와 요소 |
값의 참조 | 프로퍼티 키 | 인덱스 |
값의 순서 | X | O |
length property | X | O |
🙄자바스크립트의 배열은 배열이 아니다?
자료구조에서 말하는 배열은 동일한 크기의 메모리 공간이 빈틈없이 연속적으로 나열된 자료구조이며
배열의 요소는 하나의 데이터 타입으로 통일되어 있고 서로 연속적으로 인접해있습니다.
이러한 배열을 밀집 배열이라고 부릅니다.
따라서 이런 배열은 인덱스를 통해 단 한번의 연산으로 임의의 요소에 접근할 수 있으며
이러한 임의 접근으로 시간복잡도O(1)로 인덱스에 접근할 수 있습니다.
검색대상요소의 메모리주소 = 배열의 시작 메모리 주소 + (인덱스 * 요소의 바이트수)
하지만 정렬되지 않은 배열에서 특정한 요소를 검색하는 경우
배열의 모든 요소를 처음부터 특정 요소를 발견할 때 까지 차례대로 선형검색 해야합니다.
시간복잡도 O(n)
그리고 배열의 요소를 삽입,삭제 하는 경우 배열 요소를 연속적으로 유지하기 위해
요소를 이동시켜야 한다는 단점도 존재합니다.
메모리주소 | 1000 | 1008 | 1016 |
배열 | 1 | 2 | 3 |
인덱스 | 0 | 1 | 2 |
자료구조에서 말하는 밀집 배열
하지만 자바스크립트의 배열은 배열 요소를 위한 메모리 공간이 동일한 크기가 아니어도 괜찮으며
연속적으로 이어져 있지 않을 수도 있습니다.
이렇게 배열의 요소가 연속적으로 이어져있지 않은 배열을 희소 배열이라고 부릅니다.
또한 희소배열의 경우 배열의 요소 중 일부가 비어있을 수 있습니다.
즉 값 없이 비어있는 요소를 위해 메모리 공간을 확보하지 않습니다.
자바스크립트의 배열은 일반적인 배열의 동작을 흉내 낸 특수한 객체라고 할 수 있습니다.
자바스크립트 배열은 인덱스를 나타내는 문자열을 프로퍼티키로 가지면서
length 프로퍼티를 가지는 특수한 객체이며 배열의 요소는 사실 프로퍼티 값입니다.
자바스크립트의 모든 값은 객체의 프로퍼티 값이 될 수 있으니 어떤 타입 값도 배열 요소가 될 수 있습니다.
일반적인배열 | 자바스크립트배열 |
인덱스로 요소에 빠르게 접근 가능 | 해시테이블로 구현된 객체여서 인덱스로 요소에 접근 시 느림 |
요소를 삽입,삭제 하는게 효율적이지 않음 | 요소 삽입,삭제 시 일반적인 배열보다 빠름 |
🙄배열 고차 함수
고차함수란 함수를 인수로 전달받거나 함수를 반환하는 함수를 말합니다.
고차함수는 외부상태의 변경이나 가변 데이터를 피하고
불변성을 지향하는 함수형 프로그래밍에 기반을 두고 있습니다.
🙄Array.Prototype.sort
sort 메서드에 정렬 순서를 정의하는 비교 함수를 인수로 전달해야합니다.
비교 함수는 양수, 음수 또는 0을 반환해야합니다.
비교 함수의 반환값이 0보다 작으면 첫번째 인수를 우선하여 정렬하고
0이면 정렬하지 않으며
0보다 크면 두번째 인수를 우선하여 정렬합니다.
반응형
'javascript' 카테고리의 다른 글
요약 정리는 못 참지 않을까요? (12) 이터러블 (0) | 2023.01.17 |
---|---|
요약 정리는 못 참지 않을까요? (11) RegExp (1) | 2023.01.17 |
요약 정리는 못 참지 않을까요? (9) ES6 함수의 추가 기능 (0) | 2023.01.16 |
요약 정리는 못 참지 않을까요?(8) 자바스크립트의 클래스 (0) | 2023.01.16 |
요약 정리는 못 참지 않을까요?(7) 클로저 (0) | 2023.01.13 |