자바스크립트의 배열은 객체이다.
2분 읽기
자바스크립트의 배열은 객체이다.
프로그래밍 언어마다 배열을 구현하는 방식에 따라 배열의 내부 구현과 특징은 다를 수 있다.
예를 들어, 자바스크립트에서는 배열이 동적으로 크기가 조정되고, 다양한 데이터 타입을 혼합하여 저장할 수 있는 반면,
다른 언어(C, 자바, 파스칼)에서는 배열의 크기가 고정적이며, 단일 데이터 타입만을 저장할 수 있다.
이렇듯 언어마다 배열은 성능과 사용에 있어 서로 다른 특징을 가지지만, 그럼에도 배열이 리스트 ADT를 구현한 구현체라는 점에서는 공통적이다.
리스트 ADT
리스트 ADT(Abstract Data Type)란 유한한 길이의 순서를 가진 항목들을 저장하는 자료 구조를 의미한다.
리스트 ADT는 두 가지 방식으로 구현할 수 있다.
- 배열을 이용한 리스트 구현
- 연결을 이용한 리스트 구현
배열을 이용한 리스트 구현을 배열 리스트(Array List), 연결을 이용한 리스트 구현을 연결 리스트(Linked List) 로 구분할 수 있다. 아래는 두 구현 방식의 특징을 나열한 것 이다.
배열으로 구현한 리스트
- 인덱스(Index)와 인덱스에 해당하는 요소(Element)들로 구성된다.
- 메모리 공간에 연속된 메모리 주소를 할당받아 저장되어 있다.
- 데이터 탐색 시 임의 접근(Random Access)을 지원한다.
- 데이터의 삽입/제거 시 데이터의 이동(shift)가 발생한다.
연결으로 구현한 리스트
- 데이터와 레퍼런스 포인터(
pointer)를 가진 노드(node)들로 구성된다. - 메모리 공간에 연속된 메모리 주소를 할당받지 않는다.
- 데이터 탐색 시 순차적 접근(Sequential Access)을 지원한다.
- 데이터의 삽입/제거 시 데이터의 이동이 필요 없다.
두 특징을 살펴보면, 자바스크립트의 배열은 배열 리스트(Array List)에 더 가까운 구현체라는 것을 알 수 있다.
자바스크립트의 배열은 데이터를 순차적으로 저장하고, 인덱스를 통해 각 요소에 접근할 수 있다는 리스트 ADT의 핵심적인 속성을 충족시킨다.
자바스크립트의 배열
자바스크립트에서는 배열은 일반적인 배열과는 다른 Array.prototype 객체를 상속받는 인스턴스라는 특징을 가진다.
이를 두고 "리스트같은 객체(list-like objects)"라고 기술된다.
자바스크립트에서의 배열은 배열처럼 동작하는 해시 테이블로 구현된 특수한 객체이다.
자바스크립트는 프로토타입 기반의 언어이다.
프로토타입이기에 가능한 장점도 존재한다.
따라서, 배열은 인덱스를 키로 갖고 있고, length 프로퍼티를 갖는 특수한 객체이다.
또한 자바스크립트의 배열은 일반적인 배열의 동작을 흉내 낸 특수한 객체다.
배열을 구현하는 방식이 해당 언어의 성격이나 철학에 맞게 최적화된다는 점이 중요합니다.
관련 글
1분 읽기
자바스크립트로 구현하는 힙
힙(Heap) 자료구조의 개념과 Min Heap, Max Heap을 JavaScript와 TypeScript로 구현하는 방법을 정리합니다.
4분 읽기
소수 구하기
소수 판별법과 소수를 구하는 알고리즘을 정리합니다.
1분 읽기
[프로그래머스 Level 2] 미로 탈출
프로그래머스 미로 탈출을 BFS로 풀이합니다.