[CS] Array vs LinkedList

Jennaยท2023๋…„ 4์›” 8์ผ
0

CS

๋ชฉ๋ก ๋ณด๊ธฐ
2/2
post-thumbnail

๐Ÿ“š ๋ณธ ํฌ์ŠคํŒ…์€ CS ์™„์ „์ •๋ณต ๊ฐ•์˜๋ฅผ ์ˆ˜๊ฐ•ํ•˜๊ณ  ์ ๋Š” ๋ณต์Šต ํฌ์ŠคํŒ…์ž…๋‹ˆ๋‹ค.

1. Array

์—ฐ๊ด€๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์ƒ์— ์—ฐ์†์ ์ด๋ฉฐ ์ˆœ์ฐจ์ ์œผ๋กœ ๋ฏธ๋ฆฌ ํ• ๋‹น๋œ ํฌ๊ธฐ๋งŒํผ ์ €์žฅํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ

์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•œ๊ฑฐ๋Š”!!

  1. ๋ฉ”๋ชจ๋ฆฌ์ƒ์— ์—ฐ์†์ ์œผ๋กœ
  2. ๋ฏธ๋ฆฌ ํ• ๋‹น๋œ ๋ฐ์ดํ„ฐ๋งŒํผ

์ด๋ผ๋Š” ๋‘๊ฐ€์ง€ ํฌ์ธํŠธ๊ฐ€ ์ค‘์š”ํ•˜๋‹ค.

Array๋Š”

  • ๊ณ ์ •๋œ ์ž์žฅ๊ณต๊ฐ„
  • ์ˆœ์ฐจ์  ๋ฐ์ดํ„ฐ ์ €์žฅ

์ด๋ผ๋Š” ํŠน์ง•์„ ๊ฐ€์ง€๊ณ  ์žˆ์Œ

์ปดํ“จํ„ฐ์˜ ๋ฉ”๋ชจ๋ฆฌ์˜ ์ผ์ • ๋ถ€๋ถ„์„ array ์š”์†Œ ํ•˜๋‚˜์˜ ํฌ๊ธฐ๋กœ ํ• ๋‹นํ•˜๊ณ , ๊ทธ ์‹œ์ ๋ถ€ํ„ฐ ์—ฐ์†์ ์œผ๋กœ array์˜ ํฌ๊ธฐ๋งŒํผ ํ• ๋‹นํ•œ๋‹ค.

Array Operation๋“ค์˜ Time Complexity

  1. ์กฐํšŒ -> O(1) random Access
    ํŠน์ • ์ธ๋ฑ์Šค์˜ ๊ฐ’ ์กฐํšŒ๋Š” ๊ณ„์‚ฐ์œผ๋กœ ๋ฐ”๋กœ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ€์ง„๋‹ค.
    ex) array์˜ ํ•œ ์š”์†Œ์— ๋ฉ”๋ชจ๋ฆฌ 4๊ฐœ๊ฐ€ ํ• ๋‹น๋˜์—ˆ๊ณ  4๋ฒˆ์งธ index์˜ ๊ฐ’์„ ์•Œ๊ณ ์‹ถ๋‹ค๋ฉด?
    ์ฒซ index + 4(๋ฉ”๋ชจ๋ฆฌํฌ๊ธฐ) x 3(index)
    ์ด๋Ÿฐ์‹์œผ๋กœ ๊ณ„์‚ฐํ•ด์„œ ์ ‘๊ทผ ํ›„ ์กฐํšŒํ•œ๋‹ค.

  2. ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€/์‚ญ์ œ (append(), delete()) -> O(1)
    ๊ทธ๋ƒฅ ๋งˆ์ง€๋ง‰ ๋ฉ”๋ชจ๋ฆฌ์— ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๊ธฐ๋งŒ ํ•˜๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

  3. ์‚ฝ์ž… / ์‚ญ์ œ -> O(n)
    ์‚ญ์ œ / ์‚ฝ์ž…์„ ํ•œ ํ›„ ๋‚จ์€ ๋ฐ์ดํ„ฐ๋“ค์„ ํ•œ ์นธ์”ฉ ์˜ฎ๊ฒจ์ค˜์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— n๊ฐœ์˜ ๋ฐฐ์—ด์ด๋ผ๋ฉด O(n)์˜ ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋œ๋‹ค.

  4. ํƒ์ƒ‰ -> O(n)
    ์ผ์ผ์ด ๋ฐฉ๋ฌธํ•ด์„œ ํ™•์ธํ•˜๊ธฐ ๋•Œ๋ฌธ์— O(n)์˜ ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋œ๋‹ค.


๋‹ค์Œ๊ณผ ๊ฐ™์€ ํŠน์ง•์„ ๋ฐ”ํƒ•์œผ๋กœ ์žฅ์ ๊ณผ ๋‹จ์ ์ด ์žˆ๋‹ค.
์žฅ์ : ์กฐํšŒ๋ž‘ ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€์˜ ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค
๋‹จ์ : ์„ ์–ธ์‹œ์— ํฌ๊ธฐ๋ฅผ ๋ฏธ๋ฆฌ ์ •ํ•ด์•ผํ•˜๊ณ  ์ด์— ๋”ฐ๋ผ ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„๋‚˜ ์ถ”๊ฐ€์  overhead์™€ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

2. Dynamic Array

Array์˜ fixed size๋ผ๋Š” ํ•œ๊ณ„์ ์„ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด ๊ณ ์•ˆ๋œ Array.
์ €์žฅ๊ณต๊ฐ„์ด ๊ฐ€๋“ ์ฐจ๊ฒŒ ๋˜๋ฉด resize๋ฅผ ํ•˜์—ฌ ์œ ๋™์ ์œผ๋กœ size๋ฅผ ์กฐ์ ˆํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค.

์ค‘์š”ํ•˜๊ฒŒ ๋ณผ ๊ฒƒ์€ ๋‘๊ฐ€์ง€

  1. resize ๋ฐฉ์‹
  2. ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ ์‹œ๊ฐ„๋ณต์žก๋„

resize ๋ฐฉ์‹
๊ธฐ์กด์— ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ ์ด์ƒ์œผ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด์˜จ๋‹ค๋ฉด?
๊ธฐ์กด์˜ ๋ฉ”๋ชจ๋ฆฌ๋ณด๋‹ค ํฌ๊ฒŒ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•œ ๋ฐฐ์—ด์„ ์„ ์–ธํ•œ ํ›„ ๊ทธ ๋ฐฐ์—ด๋กœ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์˜ฎ๊ธด๋‹ค.
๋Œ€ํ‘œ์ ์œผ๋กœ๋Š” ๊ธฐ์กด Array Size์˜ 2๋ฐฐ๋ฅผ ํ• ๋‹นํ•˜๋Š” Doubling ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.

Doubling (๋”๋ธ”๋ง)
๊ธฐ์กด ๋ฐฐ์—ด ์‚ฌ์ด์ฆˆ๋ณด๋‹ค 2๋ฐฐ ํฐ ๋ฐฐ์—ด์„ ์„ ์–ธํ•จ

ํฐ ๋ฐฐ์—ด์„ ์„ ์–ธํ•˜๊ณ  ๊ธฐ์กด์˜ ๋ฐฐ์—ด์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์˜ฎ๊ฒจ์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— O(n)์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ€์ง„๋‹ค.

๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ์˜ ์‹œ๊ฐ„๋ณต์žก๋„
Dynamic Array๋„ Array์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ฒฐ๊ตญ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ• ๋•Œ๋Š” O(1)์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ€์ง„๋‹ค.
ํ•˜์ง€๋งŒ resize์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(n)
๊ทธ๋ ‡๋‹ค๋ฉด ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋Š”?

๊ฒฐ๋ก ์€ O(1) ์ด๋‹ค.
๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ resize๊ฐ€ ์ผ์–ด๋‚˜๋Š” ๊ฒฝ์šฐ๋Š” ์•„์ฃผ ๊ฐ€๋” ๋ฐœ์ƒํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์ฃผ๋กœ O(1)์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋˜๋Š”๊ฒƒ.

์ด๋ฅผ amortized O(1)์ด๋ผ๊ณ  ํ•œ๋‹ค.
์•„์ฃผ ๊ฐ€๋” ๋ฐœ์ƒํ•˜๋Š” O(n)์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” O(1)์ด ๋‚˜๋ˆ ๊ฐ€์ง€๋ฉด์„œ O(1)์ด ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค. ๋ฐ”๋‹ท๋ฌผ์— ์‹์ดˆ๋ฅผ ๋น ๋œจ๋ฆฐ๋‹ค๊ณ  ํ•ด์„œ ๋ฐ”๋‹ท๋ฌผ์ด ์…”์ง€์ง€๋Š” ์•Š๊ณ  ์—ฌ์ „ํžˆ ์ง  ๊ทธ๋Ÿฐ๊ฑฐ์ผ๋ ค๋‚˜..? ใ…Ž

Dynamic Array vs Linked List

Dynamic Array๋ฅผ Linked List์™€ ๋น„๊ตํ–ˆ์„ ๋•Œ ์žฅ๋‹จ์ ์€ ๋ฌด์—‡์ผ๊นŒ?

์žฅ์ 
1. Dynamic Array๊ฐ€ Linked List์— ๋น„ํ•ด ๋ฐ์ดํ„ฐ ์ ‘๊ทผ๊ณผ ํ• ๋‹น์ด O(1)๋กœ ๋น ๋ฅด๋‹ค. index ์ ‘๊ทผ๋ฒ•์ด ์—ฐ์‚ฐ์œผ๋กœ ์ด๋ฃจ์–ด์ง€๊ธฐ ๋•Œ๋ฌธ (random access).
2. ๋ฐ์ดํ„ฐ๋ฅผ ๋งจ ๋’ค์— ์ถ”๊ฐ€/์‚ญ์ œ๊ฐ€ O(1)๋กœ ์ƒ๋Œ€์ ์œผ๋กœ ๋น ๋ฅด๋‹ค.

๋‹จ์ 
1. ๋งจ ๋์ด ์•„๋‹Œ ๊ณณ์— ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…/์‚ญ์ œ ํ•  ๋•Œ๋Š” O(n)์œผ๋กœ ๋Š๋ฆฌ๋‹ค. ๋ฐ์ดํ„ฐ๋“ค์„ shift ํ•˜๊ธฐ ๋•Œ๋ฌธ.
2. resize์‹œ ํ˜„์ €ํžˆ ๋‚ฎ์€ performance ๋ฐœ์ƒ. ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค ์˜ฎ๊ฒจ์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ.
3. ๋ฉ”๋ชจ๋ฆฌ๊ณต๊ฐ„์„ resize ์‹œ์— ๋„‰๋„‰ํžˆ ํ• ๋‹น๋ฐ›๋Š”๋ฐ ์ด๋ ‡๊ฒŒ ๋˜๋ฉด ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋‚จ๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด ๋ฐœ์ƒ ํ•  ์ˆ˜ ์žˆ๋‹ค.

3. Linked List

node ๊ตฌ์กฐ์ฒด๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ. node์—๋Š” ๋ฐ์ดํ„ฐ๊ฐ’๊ณผ ๋‹ค์Œ node์˜ address๊ฐ€ ์ €์žฅ๋˜์–ด ์žˆ๋‹ค. ๋ฌผ๋ฆฌ์  ๋ฉ”๋ชจ๋ฆฌ ์ƒ์—์„œ๋Š” ๋น„์—ฐ์†์ ์œผ๋กœ ๋‚˜ํƒ€๋‚˜์ง€๋งŒ ๊ฐ๊ฐ์˜ node๊ฐ€ ๋‹ค์Œ node์˜ address๋ฅผ ๊ฐ€๋ฆฌํ‚ด์œผ๋กœ์จ ๋…ผ๋ฆฌ์  ์—ฐ์†์„ฑ์„ ๊ฐ€์ง„ ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค.

์ค‘์š”ํ•œ ํฌ์ธํŠธ

  1. node
  2. ๋ฌผ๋ฆฌ์  ๋ฉ”๋ชจ๋ฆฌ๋Š” ๋น„์—ฐ์†์ 
  3. ๋…ผ๋ฆฌ์  ์—ฐ์†์„ฑ

Linked List๋Š” tree, graph ๋“ฑ ๋‹ค๋ฅธ ์ž๋ฃŒ๊ตฌ์กฐ์—์„œ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ๋ณธ์ด๋‹ค. ์„ค๋ช… ํฌ์ธํŠธ๋Š” ๋ฉ”๋ชจ๋ฆฌ์ƒ์—์„œ๋Š” ๋ถˆ์—ฐ์†์ ์ด์ง€๋งŒ node์˜ address๊ฐ’์„ ๊ฐ€๋ฆฌํ‚ค๊ธฐ ๋•Œ๋ฌธ์— ๋…ผ๋ฆฌ์  ์—ฐ์†์„ฑ์„ ๋ณด์žฅํ•œ๋‹ค.
๋˜ํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ถ”๊ฐ€๋˜๋Š” ์‹œ์ ์— ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ข€ ๋” ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
node์—๋Š” ๋ฐ์ดํ„ฐ ๊ฐ’๊ณผ ๋‹ค์Œ node์˜ address๊ฐ€ ์ €์žฅ๋˜์–ด ์žˆ๋Š”๋ฐ ๋งˆ์ง€๋ง‰ node๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” address๋Š” 0x00000๋กœ null๊ฐ’์ด๋‹ค.

๋…ผ๋ฆฌ์  ์—ฐ์†์„ฑ

๊ฐ node๋“ค์€ next address ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋…ผ๋ฆฌ์  ์—ฐ์†์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ  ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋‹ค. Array๋Š” ์ด์™€๋Š” ๋‹ค๋ฅด๊ฒŒ ์—ฐ์†์„ฑ์„ ์œ„ํ•ด ๋ฉ”๋ชจ๋ฆฌ์— ์ˆœ์ฐจ์ ์œผ๋กœ ์ €์žฅ๋œ๋‹ค. Linked List๋Š” ๋…ผ๋ฆฌ์  ์—ฐ์†์„ฑ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ์— ์ˆœ์ฐจ์ ์œผ๋กœ ์ €์žฅ๋  ํ•„์š”๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์ด ๋” ์ž์œ ๋กญ๊ณ  ํšจ์œจ์ ์ด์ง€๋งŒ ๊ฐ๊ฐ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐ์ดํ„ฐ๊ฐ’๋งŒ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ address๋„ ์ถ”๊ฐ€๋กœ ์ €์žฅ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ ๋ฐ์ดํ„ฐ๊ฐ€ ์ฐจ์ง€ํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ๋Š” ๋” ํฌ๋‹ค.

๋ฐ์ดํ„ฐ ์‚ฝ์ž…/์‚ญ์ œ

Linked List์—์„œ ๋ฐ์ดํ„ฐ์˜ ์‚ฝ์ž…๊ณผ ์‚ญ์ œ๋Š” ๋‘˜๋‹ค node์˜ address ๊ฐ’๋งŒ ๋ณ€๊ฒฝํ•ด์ฃผ๋ฉด ๋œ๋‹ค.
์‚ฝ์ž…์„ ์›ํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ์›ํ•˜๋Š” ์œ„์น˜์˜ ์•ž์˜ ๋…ธ๋“œ์˜ address๋ฅผ ์‚ฝ์ž…ํ•˜๋Š” data์˜ address๋กœ ๋ณ€๊ฒฝํ•ด์ฃผ๋ฉด ๋˜๊ณ  ์‚ญ์ œ๋ฅผ ์›ํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ์‚ญ์ œํ•˜๋Š” ๋…ธ๋“œ์˜ ์•ž์˜ ๋…ธ๋“œ์˜ address๋ฅผ ๋’ค์˜ address๋กœ ๋ณ€๊ฒฝํ•ด์ฃผ๋ฉด ๋œ๋‹ค. ๋”ฐ๋ผ์„œ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(1)์ด ๋œ๋‹ค.

๋ฐ์ดํ„ฐ ์ ‘๊ทผ์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(n)์ด๋‹ค. Linked List๋Š” ๋ฐ์ดํ„ฐ์˜ ์ˆœ์ฐจ์  ์ ‘๊ทผ๋งŒ์ด ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. n๋ฒˆ์งธ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์•Œ๊ณ  ์‹ถ๋‹ค๋ฉด ์ฒ˜์Œ๋ถ€ํ„ฐ n๊นŒ์ง€์˜ address๋ฅผ ๋”ฐ๋ผ๊ฐ€์•ผ ํ•œ๋‹ค. search๋„ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™ํ•œ๋‹ค.

4. Array vs Linked List?

Array๋Š” ๋ฉ”๋ชจ๋ฆฌ์ƒ์— ๋ฐ์ดํ„ฐ๊ฐ€ ์—ฐ์†์ ์œผ๋กœ ์ €์žฅ๋œ๋‹ค. Linked List๋Š” ์—ฐ์†์ ์œผ๋กœ ์ €์žฅ๋˜์ง„ ์•Š์ง€๋งŒ ๋…ผ๋ฆฌ์  ์—ฐ์†์„ฑ์„ ๋ˆ๋‹ค. ์ด์— ๋”ฐ๋ผ ๊ฐ operation์˜ ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ ๋‹ค๋ฅด๊ฒŒ ๋‚˜ํƒ€๋‚œ๋‹ค.

ArrayLinked List
์กฐํšŒO(1)O(n)
์‚ฝ์ž…/์‚ญ์ œO(n)O(1)

๋”ฐ๋ผ์„œ ๋ฐ์ดํ„ฐ์˜ ๊ฐฏ์ˆ˜๊ฐ€ ์ •ํ•ด์ ธ์žˆ๊ณ  ์ž์ฃผ ์กฐํšŒํ•œ๋‹ค๋ฉด Array๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋˜๊ณ 
๋ฐ์ดํ„ฐ์˜ ๊ฐฏ์ˆ˜๋ฅผ ์˜ˆ์ƒํ•  ์ˆ˜ ์—†๊ณ  ์‚ฝ์ž…/์‚ญ์ œ๊ฐ€ ์ž์ฃผ ์ผ์–ด๋‚œ๋‹ค๋ฉด Linked List๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.
์ฃผ๋œ ์ฐจ์ด์ ์€ ๋ฉ”๋ชจ๋ฆฌ๊ตฌ์กฐ๋กœ Array๋Š” ์—ฐ์†์ , Linked List๋Š” ๋ถˆ์—ฐ์†์ ์ด๋ผ๋Š” ๊ฑธ ์™ธ์›Œ๋‘๋ฉด ๋œ๋‹ค.

๋‘˜์€ ๊ฐ๊ฐ ๋ฉ”๋ชจ๋ฆฌ ํ™œ์šฉ๋„๋„ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์ƒํ™ฉ์— ๋”ฐ๋ผ ๋ญ๊ฐ€ ๋” ํšจ์œจ์ ์ธ์ง€ ํŒ๋‹จํ•˜๋ฉด ๋œ๋‹ค.

์กฐํšŒ

  • Array: ์ฆ‰์‹œ ์ ‘๊ทผ random access. O(1)
  • Linked List: ์ˆœ์ฐจ ์ ‘๊ทผ sequential access. O(n)

์‚ฝ์ž…/์‚ญ์ œ

  • Array: ๋งˆ์ง€๋ง‰์ธ ๊ฒฝ์šฐ -> O(1) / ์ค‘๊ฐ„์ธ ๊ฒฝ์šฐ -> O(n)
  • Linked List: ์ฃผ์†Œ๊ฐ’๋งŒ ๋ฐ”๊พธ๊ธฐ ๋•Œ๋ฌธ์— O(1)์˜ ์‹œ๊ฐ„๋ณต์žก๋„
    ํ•˜์ง€๋งŒ Linked List๋Š” ํ•ด๋‹น index๊นŒ์ง€ ๊ฐ€๋Š” ๋ฐ์— O(n)์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ€์ง„๋‹ค.

memory

  • Array: fixed size๋ผ์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋˜์–ด ์žˆ์ง€ ์•Š๋”๋ผ๋„ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ฐจ์ง€ํ•˜๊ณ  ์žˆ์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„๊ฐ€ ๋ฐœ์ƒ ๊ฐ€๋Šฅํ•˜๋‹ค.
  • Linked List: runtime ์ค‘์—์„œ๋„ size ๋Š˜๋ฆฌ๊ณ  ์ค„์ด๊ธฐ๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— initial size๋ฅผ ๊ณ ๋ฏผํ•  ํ•„์š”๊ฐ€ ์—†๊ณ , ํ•„์š”ํ•œ ๋งŒํผ๋งŒ memory allocation์ด ์ผ์–ด๋‚˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„๋„ ์—†๋‹ค.
    ํ•˜์ง€๋งŒ Linked List๋Š” address ์ €์žฅ ๋ฉ”๋ชจ๋ฆฌ๋„ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— Array๋ณด๋‹ค ๊ฐ ์›์†Œ์˜ memory๊ฐ€ ํฌ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฐ์ดํ„ฐ์˜ ์ˆ˜๊ฐ€ ์ •ํ•ด์ ธ์žˆ๋‹ค๋ฉด ๋ฉ”๋ชจ๋ฆฌ์ƒ์—์„œ๋Š” Array๊ฐ€ ๋” ํšจ์œจ์ด ์ข‹๋‹ค.

Linked List๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ƒํ™ฉ

  1. ์‚ฝ์ž…/์‚ญ์ œ๊ฐ€ ์ž์ฃผ ๋ฐœ์ƒ
  2. ์กฐํšŒ ์ž‘์—…์ด ์ž์ฃผ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Œ
  3. ๋ฐ์ดํ„ฐ์˜ ์–‘์„ ์˜ˆ์ธกํ•  ์ˆ˜ ์—†์„ ๋•Œ

Array๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ƒํ™ฉ

  1. ์กฐํšŒ ์ž‘์—…์„ ์ž์ฃผ ํ•  ๋•Œ
  2. ๋ฐ์ดํ„ฐ ๊ฐฏ์ˆ˜๋ฅผ ๋ฏธ๋ฆฌ ์•„๋Š” ๊ฒฝ์šฐ
  3. ๋ฐ์ดํ„ฐ ๋ฐ˜๋ณต๋ฌธ์„ ํ†ตํ•ด ๋น ๋ฅด๊ฒŒ ์ˆœํšŒํ•  ๋•Œ
  4. ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ ๊ฒŒ ์“ฐ๋Š”๊ฒŒ ์ค‘์š”ํ•œ ์ƒํ™ฉ์ผ ๋•Œ

Array์™€ Linked List์˜ Memory Allocation์€ ์–ธ์ œ ์ผ์–ด๋‚˜๋ฉฐ ๋ฉ”๋ชจ๋ฆฌ์˜ ์–ด๋Š ์˜์—ญ์— ํ• ๋‹น๋˜๋Š”๊ฐ€?

  • Stack ์˜์—ญ -> compile time์— ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ ๊ฒฐ์ •
  • Heap ์˜์—ญ -> runtime์— ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ ๊ฒฐ์ •

Array๋Š” compile ๋‹จ๊ฒŒ์—์„œ memory allocation
= Static Memory Allocation์œผ๋กœ Stack Memory ์˜์—ญ์— ํ• ๋‹น

Linked List๋Š” runtime ๋‹จ๊ณ„์—์„œ memory allocation
= Dynamic Memory Allocation์œผ๋กœ Heap Memory ์˜์—ญ์— ํ• ๋‹น

profile
FE/Game Dev.

0๊ฐœ์˜ ๋Œ“๊ธ€