Javascript

자바스크립트 배열의 진실(밀집배열, 희소배열)

John' 2023. 11. 15. 23:21

인간은 망각의 동물이다. 특정한 행동이나 생각을 자주 하지 않으면 우리 뇌 속에서는 신경의 가지치기 현상이 일어난다고 한다. 우리가 어떤 생각, 기분, 행동을 수행하지 않으면 뇌는 그와 연관된 뉴런들을 발화시키지 않는데, 그 결과 그러한 생각, 기분, 행동이 점점 약해지다가 결국 시들어버리고 잊게 되는 것을 신경 가지치기라고 한다. 그렇기 때문에 우리는 초등학교 시절처럼 리코더를 연주할 수 없는거고, 곡면의 부피를 구하는 적분 공식이나 근의 공식등에 대해 더는 기억하지 못하는 것이다. 쉽건, 어렵건 지금 나는 무조건 많이 생각하고 자꾸 써보고 사용해보는 것 밖에 방도가 없다 생각한다.

 

 

일반적으로 배열은 동일한 크기의 메모리 공간이 빈틈없이 연속적으로 나열된 자료 구조를 말한다.  사실 자바스크립트에서 배열은 객체이다. 하지만 일반적인 객체와는 달리, 자바스크립트 배열은 순서가 있는 요소들의 집합으로 간주되어 인덱스를 사용하여 각 요소에 접근할 수 있다. 

1. 배열의 정의:

배열은 일반적으로 대괄호 `[]`를 사용하여 정의된다.

let myArray = [1, 2, 3, 4, 5];



2. 밀집 배열 (Dense Array):

밀집 배열은 연속적인 정수형 인덱스를 갖는 배열이다. 즉, 배열의 요소 간에 인덱스가 빠짐없이 연속되어 있다.

let denseArray = [10, 20, 30, 40, 50]; 
console.log(denseArray[2]); // 30


3. 희소 배열 (Sparse Array):

희소 배열은 비어있는 또는 `undefined`로 채워져 있는 인덱스를 갖는 배열이다. 이런 배열은 연속적인 인덱스를 가지지 않는다.

let sparseArray = []; sparseArray[2] = 30; 
console.log(sparseArray); // [ , , 30 ]

 


4. 배열과 객체의 차이:

배열은 일반적인 객체와 달리 `length` 속성을 갖고 있다. 이 속성은 배열의 길이를 나타낸다.

let myArray = [1, 2, 3, 4, 5]; 
console.log(myArray.length); // 5



또한, 배열은 배열 메서드를 사용할 수 있는데, 예를 들어, `push`, `pop`, `shift`, `unshift` 등 배열을 조작하는 메서드들이 있다.

let myArray = [1, 2, 3]; 

myArray.push(4); // 배열 끝에 4 추가 
console.log(myArray); // [1, 2, 3, 4] 

myArray.pop(); // 배열 끝에서 요소 제거 
console.log(myArray); // [1, 2, 3]



반면, 객체는 이러한 배열 메서드를 제공하지 않는다.

 


요약하면, 자바스크립트의 배열은 사실 객체지만 배열 고유의 특성과 메서드를 가지고 있어 배열처럼 사용된다. 그러나 희소 배열처럼 연속적이지 않은 인덱스를 가지거나 직접 정의된 속성을 가진 배열은 그 특성에서 일반적인 배열과 차이가 있을 수 있다.