์˜ค๋Š˜ ๋ฉด์ ‘์„ ๋ณด์•˜๋Š”๋ฐ, Array์™€ JavaScript์˜ Array์— ๊ด€ํ•œ ๊ธฐ์ˆ ์งˆ๋ฌธ์ด ์žˆ์—ˆ๊ณ , ์ด์— ๋Œ€ํ•ด์„œ ์ž˜ ์•Œ๊ณ ์žˆ์ง€ ์•Š์•„ ๊ธ€์„ ์ •๋ฆฌํ•ด๋ณด๊ณ ์ž ํ•œ๋‹ค.


์ผ๋ฐ˜์ ์ธ Array (๋ฐ€์ง‘ ๋ฐฐ์—ด)

์ผ๋ฐ˜์ ์œผ๋กœ ๋ฐฐ์—ด์ด๋ผ๋Š” ์ž๋ฃŒ ๊ตฌ์กฐ์˜ ๊ฐœ๋…์€

  1. ๋™์ผํ•œ ํฌ๊ธฐ์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด ๋นˆํ‹ˆ์—†์ด ์—ฐ์†์ ์œผ๋กœ ๋‚˜์—ด๋œ ์ž๋ฃŒ ๊ตฌ์กฐ๋ฅผ ๋งํ•œ๋‹ค.

  2. ๋ฐฐ์—ด์˜ ์š”์†Œ๋Š” ๋™์ผํ•œ ํฌ๊ธฐ๋ฅผ ๊ฐ–์œผ๋ฉฐ ๋นˆํ‹ˆ์—†์ด ์—ฐ์†์ ์œผ๋กœ ์ด์–ด์ ธ ์žˆ์œผ๋ฏ€๋กœ ์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•ด ๋‹จ ํ•œ๋ฒˆ์˜ ์—ฐ์‚ฐ์œผ๋กœ ์ž„์˜์˜ ์š”์†Œ์— ์ ‘๊ทผ(์ž„์˜ ์ ‘๊ทผ(random access), ์‹œ๊ฐ„ ๋ณต์žก๋„ O(1))ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Š” ๋งค์šฐ ํšจ์œจ์ ์ด๋ฉฐ ๊ณ ์†์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค.

    (ํ•˜์ง€๋งŒ ์ •๋ ฌ๋˜์ง€ ์•Š์€ ๋ฐฐ์—ด์—์„œ ํŠน์ •ํ•œ ๊ฐ’์„ ํƒ์ƒ‰ํ•˜๋Š” ๊ฒฝ์šฐ, ๋ชจ๋“  ๋ฐฐ์—ด ์š”์†Œ๋ฅผ ์ฒ˜์Œ๋ถ€ํ„ฐ ๊ฐ’์„ ๋ฐœ๊ฒฌํ•  ๋•Œ๊นŒ์ง€ ์ฐจ๋ก€๋Œ€๋กœ ํƒ์ƒ‰(์„ ํ˜• ํƒ์ƒ‰(linear search)์„ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(n))์ด๋‹ค.)

  3. ๋˜ํ•œ ๋ฐฐ์—ด์— ์š”์†Œ๋ฅผ ์‚ฝ์ž…ํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•˜๋Š” ๊ฒฝ์šฐ, ๋ฐฐ์—ด ์š”์†Œ๋ฅผ ์—ฐ์†์ ์œผ๋กœ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์š”์†Œ๋ฅผ ์ด๋™์‹œ์ผœ์•ผ ํ•˜๋Š” ๋‹จ์ ๋„ ์žˆ๋‹ค.

  4. ์ฆ‰, ์ผ๋ฐ˜์ ์ธ Array๋Š” ํ•˜๋‚˜์˜ ํƒ€์ž…์œผ๋กœ ํ†ต์ผ๋˜์–ด ์žˆ์œผ๋ฉฐ ์„œ๋กœ ์—ฐ์†์ ์œผ๋กœ ์ธ์ ‘ํ•ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๋Ÿฌํ•œ ๋ฐฐ์—ด์„ ๋ฐ€์ง‘ ๋ฐฐ์—ด(dense array)์ด๋ผ ํ•œ๋‹ค.

์ผ๋ฐ˜์ ์ธ Array ์ด๋ฏธ์ง€


JavaScript์˜ Array (ํฌ์†Œ ๋ฐฐ์—ด)

JavaScript์˜ Array์€ ์ผ๋ฐ˜์ ์ธ Array์™€๋Š” ๋‹ค๋ฅธ๋ฐ, ๊ทธ ์ด์œ ๋Š”

  1. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ๋ฐฐ์—ด์€ ์ผ๋ฐ˜์ ์ธ ๋ฐฐ์—ด์˜ ๋™์ž‘์„ ํ‰๋‚ด๋‚ธ ํŠน์ˆ˜ํ•œ ๊ฐ์ฒด(Array ๊ฐ์ฒด)์ด๋‹ค.

    (์ธ๋ฑ์Šค๋ฅผ ํ”„๋กœํผํ‹ฐ ํ‚ค๋กœ ๊ฐ–์œผ๋ฉฐ length ํ”„๋กœํผํ‹ฐ๋ฅผ ๊ฐ–๋Š” ํŠน์ˆ˜ํ•œ ๊ฐ์ฒด)

  2. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” ๋ชจ๋“  ๊ฐ’์ด ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ ๊ฐ’์ด ๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์–ด๋– ํ•œ ํƒ€์ž…์˜ ๊ฐ’์ด๋ผ๋„ ๋ฐฐ์—ด์˜ ์š”์†Œ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค.

  3. ๋ฐฐ์—ด์˜ ์š”์†Œ๊ฐ€ ์—ฐ์†์ ์œผ๋กœ ์ด์–ด์ ธ ์žˆ์ง€ ์•Š๋Š” ๋ฐฐ์—ด์„ ํฌ์†Œ ๋ฐฐ์—ด(sparse array)์ด๋ผ ํ•œ๋‹ค.


length ํ”„๋กœํผํ‹ฐ์™€ ํฌ์†Œ๋ฐฐ์—ด

length ํ”„๋กœํผํ‹ฐ๋Š” ๋ฐฐ์—ด์˜ ๊ธธ์ด๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” 0์ด์ƒ์˜ ์ •์ˆ˜๋ฅผ ๊ฐ’์œผ๋กœ ๊ฐ–๋Š”๋‹ค.

const arr = [1, 2, 3];

console.log(arr.length); // 3

arr.push(4);

console.log(arr.length); // 4

arr.pop();

console.log(arr.length); // 3

length ํ”„๋กœํผํ‹ฐ์— ์ž„์˜์˜ ๊ฐ’์„ ํ• ๋‹นํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

const arr = [1, 2, 3, 4, 5];

arr.length = 3;

console.log(arr); // [1, 2, 3]
const arr = [1, 2, 3];

arr.length = 6;

console.log(arr.length); // 6
console.log(arr); // [ 1, 2, 3, <3 empty items> ]

์œ„ ์ฝ”๋“œ์—์„œ ์ถœ๋ ฅ ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•ด ๋ณด์•˜์„ ๋•Œ, arr ๋ณ€์ˆ˜์— ์„ ์–ธ๋œ length ํ”„๋กœํผํ‹ฐ์˜ ๊ฐ’๋ณด๋‹ค ํฐ ์ˆซ์ž์˜ length๋ฅผ ํ• ๋‹นํ•˜๊ฒŒ ๋˜๋ฉด length์˜ ๊ธธ์ด๋Š” ๋ณ€๊ฒฝ๋˜์ง€๋งŒ, ์‹ค์ œ arr ๋ณ€์ˆ˜์—๋Š” ์•„๋ฌด๋Ÿฐ ๋ณ€ํ™”๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— 3 empty items๋ผ๋Š” console.log์— ์ฐํžˆ๊ฒŒ ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ๋‹ค.

console.log(Object.getOwnPropertyDescriptors(arr));

/*
  {
    '0': { value: 1, writable: true, enumerable: true, configurable: true },
    '1': { value: 2, writable: true, enumerable: true, configurable: true },
    '2': { value: 3, writable: true, enumerable: true, configurable: true },
    length: { value: 6, writable: true, enumerable: false, configurable: false }
  }
/*

getOwnPropertyDescriptors()๋ฅผ ํ†ตํ•ด์„œ ํ™•์ธ ์‚ฌ์‚ด์„ ํ•ด๋ณด๋ฉด ๊ฐ’์ด ์—†๋Š” ์š”์†Œ๋ฅผ ์œ„ํ•ด ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ํ™•๋ณดํ•˜์ง€ ์•Š์€ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด์ฒ˜๋Ÿผ ๋ฐฐ์—ด์˜ ์š”์†Œ๊ฐ€ ์—ฐ์†์ ์œผ๋กœ ์œ„์น˜ํ•˜์ง€ ์•Š๊ณ  ์ผ๋ถ€๊ฐ€ ๋น„์–ด ์žˆ๋Š” ๋ฐฐ์—ด์„ ํฌ์†Œ ๋ฐฐ์—ด์ด๋ผ๊ณ  ํ•œ๋‹ค.


์žฅ๋‹จ์ 

์ผ๋ฐ˜์ ์ธ Array์€ ์ธ๋ฑ์Šค๋กœ ๋ฐฐ์—ด ์š”์†Œ์— ๋น ๋ฅด๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ํŠน์ • ์š”์†Œ๋ฅผ ํƒ์ƒ‰ํ•˜๊ฑฐ๋‚˜ ์š”์†Œ๋ฅผ ์‚ฝ์ž… ๋˜๋Š” ์‚ญ์ œํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ํšจ์œจ์ ์ด์ง€ ์•Š๋‹ค.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ Array์€ ํ•ด์‹œ ํ…Œ์ด๋ธ”๋กœ ๊ตฌํ˜„๋œ ๊ฐ์ฒด์ด๋ฏ€๋กœ ์ธ๋ฑ์Šค๋กœ ๋ฐฐ์—ด ์š”์†Œ์— ์ ‘๊ทผํ•˜๋Š” ๊ฒฝ์šฐ, ์ผ๋ฐ˜์ ์ธ ๋ฐฐ์—ด๋ณด๋‹ค ์„ฑ๋Šฅ์ ์ธ ๋ฉด์—์„œ ๋Š๋ฆด ์ˆ˜ ๋ฐ–์— ์—†๋Š” ๊ตฌ์กฐ์ ์ธ ๋‹จ์ ์„ ๊ฐ–๋Š”๋‹ค. ํ•˜์ง€๋งŒ ํŠน์ • ์š”์†Œ๋ฅผ ํƒ์ƒ‰ํ•˜๊ฑฐ๋‚˜ ์š”์†Œ๋ฅผ ์‚ฝ์ž… ๋˜๋Š” ์‚ญ์ œํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์ผ๋ฐ˜์ ์ธ ๋ฐฐ์—ด๋ณด๋‹ค ๋น ๋ฅธ ์„ฑ๋Šฅ์„ ๊ธฐ๋Œ€ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ฆ‰, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฐฐ์—ด์€ ์ธ๋ฑ์Šค๋กœ ๋ฐฐ์—ด ์š”์†Œ์— ์ ‘๊ทผํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์ผ๋ฐ˜์ ์ธ ๋ฐฐ์—ด๋ณด๋‹ค ๋Š๋ฆฌ์ง€๋งŒ ํŠน์ • ์š”์†Œ๋ฅผ ํƒ์ƒ‰ํ•˜๊ฑฐ๋‚˜ ์š”์†Œ๋ฅผ ์‚ฝ์ž… ๋˜๋Š” ์‚ญ์ œํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์ผ๋ฐ˜์ ์ธ ๋ฐฐ์—ด๋ณด๋‹ค ๋น ๋ฅด๋‹ค.


์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋ฐฐ์—ด๊ณผ ๊ฐ์ฒด ๋น„๊ต

์ž๋ฐ”์Šคํฌ๋ฆฌ๋ธŒ์˜ ๋ฐฐ์—ด์€ ์ธ๋ฑ์Šค๋กœ ๋ฐฐ์—ด ์š”์†Œ์— ์ ‘๊ทผํ•  ๋•Œ ์ผ๋ฐ˜์ ์ธ ๋ฐฐ์—ด๋ณด๋‹ค ๋Š๋ฆด ์ˆ˜ ๋ฐ–์— ์—†๋Š” ๊ตฌ์กฐ์ ์ธ ๋‹จ์ ์„ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด ๋ฐฐ์—ด์„ ์ผ๋ฐ˜ ๊ฐ์ฒด์™€ ๊ตฌ๋ณ„ํ•˜์—ฌ ๋ณด๋‹ค ๋ฐฐ์—ด์ฒ˜๋Ÿผ ๋™์ž‘ํ•˜๋„๋ก ์ตœ์ ํ™”ํ•˜์—ฌ ๊ตฌํ˜„ํ•˜์˜€๋‹ค.

์•„๋ž˜๋Š” ๋ชจ๋˜์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์˜ˆ์ œ๋ฅผ ๊ฐ€์ ธ์™”๋‹ค.

const arr = [];

console.time('Array Performance Test');

for (let i = 0; i < 10000000; i++) {
  arr[i] = i;
}
console.timeEnd('Array Performance Test');
// ์•ฝ 340ms

const obj = {};

console.time('Object Performance Test');

for (let i = 0; i < 10000000; i++) {
  obj[i] = i;
}

console.timeEnd('Object Performance Test');
// ์•ฝ 600ms

์ฐธ๊ณ ๋งํฌ

MDN - Array

MDN - Array.isArray()

๋ชจ๋˜์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ - ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฐฐ์—ด์€ ๋ฐฐ์—ด์ด ์•„๋‹ˆ๋‹ค

TCP - ๋ฐฐ์—ด์˜ ๊ธฐ์ดˆ

[JavaScript] ๋ฐฐ์—ด์ด ๋ฐฐ์—ด์ด ์•„๋‹ˆ๋ผ๊ณ ?