Dynamic Array vs Linked List
๐ค Array
- ์ ๋ ฅ๋ ๋ฐ์ดํฐ๋ค์ด ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์์ ์ฐ์์ ์ผ๋ก ์ ์ฅ๋์ด ์๋ ์๋ฃ๊ตฌ์กฐ
- ๋ฉ๋ชจ๋ฆฌ์์์ ์ฐ์์ ์ผ๋ก ์ ์ฅ๋์ด ์๋ ํน์ง์ ๊ฐ๊ธฐ ๋๋ฌธ์, index๋ฅผ ํตํ ์ ๊ทผ์ด ์ฉ์ดํ๋ค.
- ๋ฐฐ์ด์ ํฌ๊ธฐ๋ ์ฒ์ ์์ฑํ ๋ ์ ํ๋ฉฐ, ์ดํ์๋ ๋ณ๊ฒฝํ ์ ์๋ค.
[Array ์๊ฐ๋ณต์ก๋]
- ํ์ :
O(1)
- ์ ๊ทผํ๊ณ ์ ํ๋ ์ธ๋ฑ์ค๋ฅผ ์๊ณ ์์ ๋, ํด๋น ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ก ๋ฐ๋ก ์ ๊ทผํ ์ ์๋ค.
- ์ฝ์
๋ฐ ์ญ์ :
O(n)
- ๋ฐฐ์ด์ ๋์์ ์์ ์ด ์ํ๋๋ฉด O(1)์ด์ง๋ง ๋ณดํต์ ๊ฒฝ์ฐ ์ค๊ฐ์ ์ฝ์ /์ญ์ ๋๋ค.
- ์ด์ ๋ฐ๋ฅธ ๋ค์ ๋ฐ์ดํฐ๋ค๋ ์ฎ๊ฒจ์ฃผ๋ ์์
์ ํด์ผํ๋ฏ๋ก
O(n)
์ด ์์๋๋ค.
[Array์ ํ๊ณ]
- ์์ฑ ์์ ๊ธธ์ด๊ฐ ์ ํด์ง๋ฏ๋ก ๊ธธ์ด๋ฅผ ๋ฐ๊พธ๋ ๋ฐ์ ๋นํจ์จ์ ์ด๋ค.
- ์๋ก์ด ๊ธธ์ด์ ๋ฐฐ์ด์ ๋ฉ๋ชจ๋ฆฌ์ ๋ฐ๋ก ํ ๋นํ๊ณ , ๋ฐ์ดํฐ๋ฅผ ๋ณต์ฌํ ํ, ๊ธฐ์กด์ ๋ฐฐ์ด์ ์ญ์ ํ๋ ์ธ ๋จ๊ณ๋ฅผ ๊ฑฐ์ณ์ผํ๋ค.
- ๊ธธ์ด๋ฅผ ๋๋ฆฌ๋ ์์ ์์ฒด๊ฐ ์ง์๋์ง ์์ผ๋ฏ๋ก ๊ฐ๋ฐ์๊ฐ ์ง์ ๋ก์ง์ ์ค๊ณํด์ผ ํ๋ค.
Inner Fragmentation
- ๋ฐ์ดํฐ๊ฐ ์์ด๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฐจ์งํ๊ธฐ ๋๋ฌธ์ ์์๊ฐ ์ญ์ ๋์ด๋ ๋น์๋ฆฌ(null)๊ฐ ๋จ๊ฒ ๋๋ค.
Outer Fragmentation
- array๋ ๋ฉ๋ชจ๋ฆฌ์ ์ฐ์๋ ๊ณต๊ฐ์ ํ์๋ก ํ๊ธฐ ๋๋ฌธ์ ์์ฉํ ์ ์๋ ์ถฉ๋ถํ ๊ณต๊ฐ์ด ์์์๋ ์ฐ์๋์ง ์๋ค๋ฉด ์ ์ฅํ ์ ์๋ค.
์๋ ๊ทธ๋ฆผ์์ ๋ง์ฝ ๋ฐฐ์ด์ด 50KB์ ์ฐ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ์๋ก ํ๋ค๋ฉด ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ด ๋ค ๋๋์ด์ ธ ์์ผ๋ฏ๋ก ์ ์ฅํ ์ ์๋ค.
๐ฎ Dynamic Array
- Java :
ArrayList
C++ :
Vector
- ๊ณ ์ ๋ ๊ธธ์ด๋ฅผ ๊ฐ๋ Array์ ํ๊ณ๋ฅผ ๊ทน๋ณตํ๊ธฐ ์ํด ๋์จ ์๋ฃ๊ตฌ์กฐ์ด๋ค.
- ํฌ๊ธฐ๊ฐ ๊ฐ๋ณ์ ์ผ๋ก ๋ณํ๋ ์ ํ๋ฆฌ์คํธ์ด๋ค.
- ๋ฐ๋ผ์ ํฌ๊ธฐ๊ฐ ๋ณํ๋ ๋ฐฐ์ด์ ์ฌ์ฉํ ๋๋ ๋ฐฐ์ด์ ํฌ๊ธฐ๋ฅผ ์ ์ ์๋ ๊ฒฝ์ฐ์ ์ฌ์ฉํ๋ค.
- ์๊ฐ๋ณต์ก๋๋ ์ผ๋ฐ array์ ๊ฐ๋ค.
- ๋ฐํ์ ์์ ์๋์ผ๋ก ๊ธธ์ด๊ฐ ์ฆ๊ฐํ์ง๋ง
Fragmentation
๋ฌธ์ ๋ ํด๊ฒฐ๋์ง ์์๋ค.
๐ Linked List
- ์ฌ๋ฌ ๊ฐ์ ๋ ธ๋๋ค์ด ์์ฐจ์ ์ผ๋ก ์ฐ๊ฒฐ๋ ํํ๋ฅผ ๊ฐ๋ ์๋ฃ๊ตฌ์กฐ
- ์ฒซ๋ฒ์งธ ๋ ธ๋๋ฅผ Head, ๋ง์ง๋ง ๋ ธ๋๋ฅผ Tail ์ด๋ผ๊ณ ํ๋ค.
- ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ฐ ๋
ธ๋๋ ์ด์ ๋
ธ๋์ ๋ค์ ๋
ธ๋์ ์ํ๋ง ์๊ณ ์์ผ๋ฉด ๋๋ค.
- ๋ฐฐ์ด๊ณผ๋ ๋ค๋ฅด๊ฒ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฐ์์ ์ผ๋ก ์ฌ์ฉํ์ง ์๋๋ค.
[LinkedList ์๊ฐ๋ณต์ก๋]
- ํ์ :
O(n)
- ์ฒ์๋ถํฐ ๋
ธ๋๋ฅผ ์ํํ์ฌ ํ์ํ๋ฏ๋ก
O(n)
์ด๋ค.
- ์ฒ์๋ถํฐ ๋
ธ๋๋ฅผ ์ํํ์ฌ ํ์ํ๋ฏ๋ก
- ์ฝ์
๋ฐ ์ญ์ :
O(1)
- ๋ถํ์ํ ๋ฐ์ดํฐ์ ๋ณต์ฌ๊ฐ ์์ด ๋ฐ์ดํฐ์ ์ฝ์ , ์ญ์ ์ ์ ๋ฆฌํ๋ค.
- ๊ทธ๋ฌ๋ ์ฝ์
, ์ญ์ ๋ฅผ ํ๊ธฐ ์ํ ๋
ธ๋๋ฅผ ์ฐพ๋ ์๊ฐ์
O(n)
์ด ๊ฑธ๋ฆฐ๋ค.
๐จ ํ ๋น ์์ญ
- ์ผ๋ฐ์ ์ผ๋ก ๋ฐฐ์ด์ stack ์ ํ ๋น๋๋ค.
- ๊ทธ๋ฌ๋
new
์ฐ์ฐ์๋ก ์์ฑ๋๋ ๊ฒฝ์ฐ heap ์ ํ ๋น๋๋ค. - JAVA๋ ๋ชจ๋
new
์ฐ์ฐ์๋ก ์์ฑ๋๋ฏ๋ก ๋ชจ๋ heap ์ ํ ๋น๋๋ค. - LinkedList๋
new
๋ก ์์ฑํ๋ฏ๋ก heap์ ํ ๋น๋๋ค.
1
2
int stackArray[5]; // stack ์ ํ ๋น๋๋ค.
int* array = new int[10]; // heap ์ ํ ๋น๋๋ค.
1
int[] array = new int[10]; // heap ์ ํ ๋น๋๋ค.
๐ค ์๋ฃ๊ตฌ์กฐ ์ ํ
- ๋ฐ์ดํฐ์ ๊ฒ์์ด ์ฃผ๊ฐ ๋๋ ๊ฒฝ์ฐ
Dynamic Array
๋ฅผ ์ฌ์ฉํ๋ค. - ๋ฐ์ดํฐ์ ์ฝ์
, ์ญ์ ๊ฐ ๋น๋ฒํ๋ค๋ฉด
LinkedList
๋ฅผ ์ฌ์ฉํ๋ค.
[๋ฐฑ์ค ๋ฌธ์ ๋ฅผ ํตํ ์๋ฃ๊ตฌ์กฐ ์ฐจ์ด ์ฒดํ]
- ์ผ์ฑ ๊ธฐ์ถ ๋ฌธ์ ์ ๊ตฌํ ๋ฌธ์ ์ด๋ค.
- ์๊ฐ ์ ํ์ด 0.3์ด๋ก ์งง๊ฒ ์ค์ ๋์ด ์๊ณ ์ญ์ ์ฐ์ฐ์ด ๋น๋ฒํ๊ฒ ๋ฐ์ํ๋ค.
- ๋ฐ๋ผ์
Dynamic Array
๋ฅผ ์ฌ์ฉํ๋ฉด ์๊ฐ์ด๊ณผ๊ฐ ๋ฐ์ํ๋ฏ๋กLinkedList
๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.
๋๊ตฐ๊ฐ๊ฐ ๋ฌผ์ด๋ณธ๋ค๋ฉด
Dynamic Array๋ Array์ ํฌ๊ธฐ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ผ๋ ๋จ์ ์ ๋ณด์ํ๊ธฐ ์ํด ๋ง๋ค์ด์ก์ต๋๋ค. ํ์ง๋ง
๊ฒ์์ด ์์ฃผ ๋ฐ์ํ๋ ๊ฒฝ์ฐ Array๋ฅผ, ์ฝ์ ๋ฐ ์ญ์ ๊ฐ ์์ฃผ ๋ฐ์ํ๋ ๊ฒฝ์ฐ LinkedList๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ์ ๋ฆฌํฉ๋๋ค.
Fragmentation
๋ฌธ์ ๋ ํด๊ฒฐ๋์ง ์์์ต๋๋ค. ๊ฒ์์ด ์์ฃผ ๋ฐ์ํ๋ ๊ฒฝ์ฐ Array๋ฅผ, ์ฝ์ ๋ฐ ์ญ์ ๊ฐ ์์ฃผ ๋ฐ์ํ๋ ๊ฒฝ์ฐ LinkedList๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ์ ๋ฆฌํฉ๋๋ค.
This post is licensed under CC BY 4.0 by the author.