์ด ํฌ์คํ ์ ์ฃผํ์ฒ ์ '๋ฉด์ ์ ์ํ CS ์ ๊ณต์ง์ ๋ ธํธ' 5.2์ฅ์ ํ ๋๋ก ์์ฑ๋์์ต๋๋ค.
์ฑ ๊ณผ๋ ๋ค๋ฅด๊ฒ Java ์ฝ๋๋ฅผ ์์๋ก ํฉ๋๋ค.
์ ํ ์๋ฃ ๊ตฌ์กฐ
- ์์๊ฐ ์ผ๋ ฌ๋ก ๋์ด๋์ด ์๋ ์๋ฃ ๊ตฌ์กฐ
์ฐ๊ฒฐ ๋ฆฌ์คํธ(Linked List)
- ๋ฐ์ดํฐ๋ฅผ ๋ ธ๋ ๋จ์๋ก ์ ์ฅ
- ๊ฐ ๋ ธ๋๊ฐ ํฌ์ธํฐ๋ฅผ ํตํด ๋ค์ ๋ ธ๋๋ฅผ ๊ฐ๋ฆฌํค๋ฉฐ ์ฐ๊ฒฐ๋ ๊ตฌ์กฐ

๋ฐฐ์ด์ฒ๋ผ ์ฐ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ฒ์ด ์๋๋ผ,
๋ฐ์ดํฐ๊ฐ ๋ฉ๋ชจ๋ฆฌ ์์ ํฉ์ด์ ธ ์์ด๋ ํฌ์ธํฐ๋ฅผ ์ด์ฉํ์ฌ ์์๋๋ก ์ฐ๊ฒฐํฉ๋๋ค.
๋ ธ๋๊ฐ ๋์ ์ผ๋ก ํ ๋น๋ ์ ์์ผ๋ฏ๋ก ๋ฆฌ์คํธ์ ํฌ๊ธฐ๊ฐ ์คํ ์ค์ ์ ์ฐํ๊ฒ ๋ณํ ์ ์์ต๋๋ค.
- ์ฝ์
/์ญ์ ์๊ฐ ๋ณต์ก๋: O(1)
- ํฌ์ธํฐ ์ฐ๊ฒฐ๋ง ํ๋ฉด ๋๋ฏ๋ก ๋น ๋ฆ ๋๋ค.
- ํ์ ์๊ฐ ๋ณต์ก๋: O(n)
- ์ํ๋ ๋ฐ์ดํฐ๊ฐ ๋์ฌ ๋๊น์ง ํค๋(์ฒซ ๋ฒ์งธ ๋ ธ๋)๋ถํฐ ์์ฐจ์ ์ผ๋ก ํ์ํ๋ฏ๋ก ๋๋ฆฝ๋๋ค.
ํฌ์ธํฐ ์ฐ๊ฒฐ๋ง ์ํ๋ฉด ๋จ์ํ ๋จ์ผ ์ฐ๊ฒฐ ๋ฆฌ์คํธ ์ธ์ ๋ค์ํ ํํ๋ก ๊ตฌํํ ์ ์์ต๋๋ค.

์๋ฐ ์ปฌ๋ ์ ํ๋ ์์ํฌ์์ `java.util.LinkedList` ํด๋์ค๋ฅผ ์ ๊ณตํ์ฌ ํธ๋ฆฌํ๊ฒ ์ธ ์ ์์ต๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ์ด์ค ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌํ๋์ด ์์ต๋๋ค.
์ฃผ์ ๋ฉ์๋
| ๋ฉ์๋ | ์ค๋ช | ๋ณต์ก๋ |
| `add(E element)` | ๋ฆฌ์คํธ์ ๋งจ ๋์ ์์๋ฅผ ์ถ๊ฐ | O(1) |
| `add(int index, E elment)` | ์ง์ ๋ index ์์น์ ์์๋ฅผ ์ฝ์ | O(1) |
| `get(int index)` | ์ง์ ๋ index ์์น์ ์์๋ฅผ ๋ฐํ | O(n) |
| `getFirst()` | ๋ฆฌ์คํธ์ ์ฒซ ๋ฒ์งธ ์์๋ฅผ ๋ฐํ | O(1) |
| `getLast()` | ๋ฆฌ์คํธ์ ๋ง์ง๋ง ์์๋ฅผ ๋ฐํ | ์ด์ค ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ธ ๊ฒฝ์ฐ O(1) ๋จ์ผ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ธ ๊ฒฝ์ฐ O(n) |
| `indexOf(Object o)` | ํด๋น ์์๊ฐ ์ฒ์ ๋ํ๋๋ ์ธ๋ฑ์ค ๋ฐํ | O(n) |
| `remove(int index)` | ์ง์ ๋ index ์์น์ ์์๋ฅผ ์ ๊ฑฐ | O(n) |
LinkedList<String> list = new LinkedList<>();
// ๋งจ ์ ์ฝ์
/์ญ์ ๋ O(1)
list.addFirst("A"); // O(1)
list.removeFirst(); // O(1)
// ๋งจ ๋ ์ฝ์
/์ญ์ ๋ O(1)
list.addLast("Z"); // O(1)
list.removeLast(); // O(1)
๋ฐฐ์ด(Array)
- ๋์ผํ ์๋ฃํ์ ๋ฐ์ดํฐ๋ฅผ ์ฐ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์์ฐจ์ ์ผ๋ก ์ ์ฅํ๋ ๊ตฌ์กฐ
- ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ์ฐ์์ ์ธ ์์น์ ํ ๋น
- ๋ฐฐ์ด์ด ์ ์ธ๋ ๋ ์ง์ ๋ ํฌ๊ธฐ๋ก ๊ณ ์ ๋๋ฉฐ, ์คํ ์ค ํฌ๊ธฐ๋ฅผ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
- ์ธ๋ฑ์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ ๊ทผํ๋ฉฐ, 0๋ถํฐ ์์ํฉ๋๋ค.
๋ฐฐ์ด์ ์ธ๋ฑ์ค๋ฅผ ํตํด ๋น ๋ฅธ ์ ๊ทผ์ด ๊ฐ๋ฅํ์ง๋ง, ๋ฐ์ดํฐ ์ฝ์ /์ญ์ ์๋ ๋นํจ์จ์ ์ ๋๋ค.
- ํ์/์ ๊ทผ ์๊ฐ ๋ณต์ก๋: O(1)
- ์ธ๋ฑ์ค๋ฅผ ํตํด ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ๋ฐ๋ก ๊ณ์ฐํ์ฌ ์ํ๋ ์์์ ์ฆ์ ์ ๊ทผ ๊ฐ๋ฅ
- = ๋๋ค ์ ๊ทผ(random access)
- ์ฝ์
/์ญ์ ์๊ฐ ๋ณต์ก๋: O(n)
- ์ค๊ฐ์ ์์๋ฅผ ์ฝ์ /์ญ์ ํ๋ฉด ๊ทธ ๋ค์ ์๋ ๋ชจ๋ ์์๋ค์ ํ ์นธ์ฉ ๋ฐ๊ฑฐ๋ ๋น๊ธฐ๋ ์ด๋ ์์ ํ์
๋ฐฐ์ด๊ณผ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ํต์ฌ ์ฐจ์ด
| ๊ตฌ๋ถ | ๋ฐฐ์ด (Array) | ์ฐ๊ฒฐ ๋ฆฌ์คํธ (Linked List) |
| ๋ฉ๋ชจ๋ฆฌ ๋ฐฐ์น | ๋ฌผ๋ฆฌ์ ์ผ๋ก ์ฐ์์ | ๋ ผ๋ฆฌ์ ์ผ๋ก ์ฐ์์ (๋ฌผ๋ฆฌ์ ์ผ๋ก๋ ๋ถ์ฐ) |
| ์ฃผ์ ์ฅ์ | ๋น ๋ฅธ ์ ๊ทผ () | ๋น ๋ฅธ ์ฝ์ /์ญ์ () |
| ์ฃผ์ ๋จ์ | ๋๋ฆฐ ์ฝ์ /์ญ์ () | ๋๋ฆฐ ์ ๊ทผ () |
๊ณ ์ ํฌ๊ธฐ๋ผ๋ ํน์ง์ผ๋ก ์ ์ ๋ฐฐ์ด(Static Array)์ด๋ผ๊ณ ๋ ํฉ๋๋ค.
๊ทธ๋ฌ๋ Java๋ฅผ ํฌํจํ ๋ง์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ๊ฐ๋ณ ํฌ๊ธฐ ๋ฆฌ์คํธ ์ธํฐํ์ด์ค(`java.util.ArrayList`)๋ฅผ ์ ๊ณตํฉ๋๋ค.
๋ฐฐ์ด์ ํฌ๊ธฐ๊ฐ ๋ถ์กฑํด์ง๋ฉด ์๋์ผ๋ก ๋ ํฐ ๋ฐฐ์ด์ ์๋ก ํ ๋นํ๊ณ , ๋ฐ์ดํฐ๋ฅผ ๋ณต์ฌํฉ๋๋ค.
์ด๋ฌํ ๊ตฌ์กฐ๋ฅผ ๋์ ๋ฐฐ์ด(Dynamic Array)๋ผ๊ณ ๋ถ๋ฆ ๋๋ค.
import java.util.ArrayList;
public class ArrayExample {
public static void main(String[] args) {
// ์ ์ ๋ฐฐ์ด ์์
// 1. ์ ์ธ ์ ํฌ๊ธฐ(5)๋ฅผ ์ง์
int[] numbers = new int[5];
// 2. ์์ ์ฝ์
(O(1) ์ ๊ทผ)
numbers[0] = 10;
numbers[1] = 20;
numbers[2] = 30;
numbers[3] = 40;
numbers[4] = 50;
// 3. ์์ ์ ๊ทผ ๋ฐ ํ์ (O(1) ์ ๊ทผ)
System.out.println("์ธ ๋ฒ์งธ ์์ (์ธ๋ฑ์ค 2): " + numbers[2]); // 30
// 4. ํฌ๊ธฐ ๋ณ๊ฒฝ ์๋ (๋ถ๊ฐ๋ฅ!)
// numbers[5] = 60; // ๐ ์ค๋ฅ ๋ฐ์: Index 5 out of bounds for length 5
// 5. ์ํ
System.out.print("๋ฐฐ์ด ์์: ");
for (int i = 0; i < numbers.length; i++) {
System.out.print(numbers[i] + " ");
}
System.out.println();
// --------------------------------------------------------------------
// 1. ์ ์ธ (์ด๊ธฐ ํฌ๊ธฐ๋ฅผ ์ง์ ํ ํ์ ์์)
ArrayList<String> fruits = new ArrayList<>();
// 2. ์์ ์ฝ์
(ํฌ๊ธฐ๊ฐ ์๋์ผ๋ก ์ฆ๊ฐ)
fruits.add("Apple"); // O(1) (์๊ฐ O(n) ๋ฐ์ ๊ฐ๋ฅ)
fruits.add("Banana");
fruits.add("Cherry");
// 3. ์๋ก์ด ์์ ์ถ๊ฐ (ํฌ๊ธฐ๊ฐ ๋ถ์กฑํ๋ฉด ์๋์ผ๋ก ๋ด๋ถ ๋ฐฐ์ด ํ์ฅ ๋ฐ ๋ณต์ฌ)
fruits.add("Grape"); // O(1) ๋๋ O(n) (๋ฐฐ์ด ๋ณต์ฌ ๋ฐ์ ์)
// 4. ์ํ
System.out.print("ArrayList ์์: ");
for (String fruit : fruits) {
System.out.print(fruit + " ");
}
System.out.println();
}
}
๋ฒกํฐ(Vector)
- ๋์ ์ผ๋ก ์์๋ฅผ ํ ๋นํ ์ ์๋ ๋์ ๋ฐฐ์ด
- ์ปดํ์ผ ์์ ์ ๊ฐ์๋ฅผ ๋ชจ๋ฅผ ๋ ์ฌ์ฉ
- ์ธ๋ฑ์ค๋ฅผ ํตํ ๋น ๋ฅธ ์ ๊ทผ ๊ฐ๋ฅ
- Java์์๋ ArrayList๋ฅผ ์ฃผ๋ก ์ฌ์ฉํด ํ์ฌ๋ ๋ฒกํฐ๋ฅผ ๊ฑฐ์ ์ฌ์ฉํ์ง ์์
- ํ์ ์๊ฐ ๋ณต์ก๋: O(1)
- ์ธ๋ฑ์ค ๊ธฐ๋ฐ์ผ๋ก ๋น ๋ฅด๊ฒ ์ฐพ์ ์ ์์ต๋๋ค.
- ๋งจ ๋ค์ ์์๋ฅผ ์ญ์ ํ๊ฑฐ๋ ์ฝ์
ํ๋ ์๊ฐ ๋ณต์ก๋: O(1)
- ๋ฒกํฐ์ ํฌ๊ธฐ๊ฐ ์ฆ๊ฐ๋๋ ์๊ฐ์ด O(1)์ด๊ธฐ ๋๋ฌธ์ ๋๋ค.
- ๋งจ ๋ค๊ฐ ์๋ ์์๋ฅผ ์ญ์ ํ๊ฑฐ๋ ์ฝ์
ํ๋ ์๊ฐ ๋ณต์ก๋: O(n)
- ๋ฐฐ์ด๊ณผ ๊ฐ์ต๋๋ค.
ํ์ฌ ์๋ฐ์์๋ Vector ๋์ ArrayList๋ฅผ ์ฃผ๋ก ์ฌ์ฉํฉ๋๋ค.
๊ธฐ๋ฅ๊ณผ ๋ฉ์๋ ๊ตฌ์ฑ์ด ๊ฑฐ์ ๋์ผํ๋ ๋ฉํฐ์ค๋ ๋ ํ๊ฒฝ์์์ ๋์ ๋ฐฉ์์ ์ฐจ์ด๊ฐ ์์ต๋๋ค.

Vector๋ ๋ชจ๋ public ๋ฉ์๋์ `synchronized` ํค์๋๊ฐ ๋ถ์ด ์์ด
๋ฉํฐ์ค๋ ๋ ํ๊ฒฝ์์ ๋ ๊ฐ ์ด์์ ์ค๋ ๋๊ฐ ๋์์ ์ด ์ฝ๋์ ์ ๊ทผํ ์ ์๋๋ก ์ ๊ธ(lock)์ด ๊ฑธ๋ ค ์์ต๋๋ค.
๋ฐ๋ผ์ Vector ํด๋์ค๋ ๋ฉํฐ์ค๋ ๋ ํ๊ฒฝ์์ ์์ ํ๊ฒ ์ฌ์ฉํ ์ ์๋ ์ปฌ๋ ์ ์ ๋๋ค. (Thread-safe)
๋ฐ๋ฉด ArrayList๋ ๋๊ธฐํ ์ฒ๋ฆฌ๊ฐ ๋์ด ์์ง ์์ ์์ ํ์ง ์์ต๋๋ค. (Thread-unsafe)
๊ทธ๋ ๋ค๊ณ Vector๊ฐ ArrayList๋ณด๋ค ๋ฐ๋์ ์ข๋ค๊ณ ํ ์ ์์ต๋๋ค.
Vector์ ๋ฉ์๋๋ ์ค๋ ๋-์ธ์ดํํ์ง๋ง, Vector ์ธ์คํด์ค ๊ฐ์ฒด ์์ฒด์๋ ๋๊ธฐํ๊ฐ ๋์ด ์์ง ์์ ๋๊ธฐํ๊ฐ ์๋ฒฝํ์ง๋ ์๊ณ ,
๊ฐ์ ๋๊ธฐํ ๋๋ฌธ์ ์ฑ๋ฅ์ด ์ ํ๋์ด์ ํ๋์๋ ArrayList๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์คํ(Stack)
- ๊ฐ์ฅ ๋ง์ง๋ง์ผ๋ก ๋ค์ด๊ฐ ๋ฐ์ดํฐ๊ฐ ๊ฐ์ฅ ์ฒซ ๋ฒ์งธ๋ก ๋์ค๋ ํ์ ์ ์ถ: LIFO(Last In First Out) ๊ตฌ์กฐ
์ฃผ์ ๋ฉ์๋
์คํ์์ ๋ฐ์ดํฐ๊ฐ ์ญ์ ๊ฐ ์ด๋ฃจ์ด์ง๋ ์ ์ผํ ๋ถ๋ถ์ Top์ด๋ผ๊ณ ํฉ๋๋ค. ์ด Top์ ํตํด ์ฐ์ฐ์ ์ฒ๋ฆฌํฉ๋๋ค.
Top ํ ๊ณณ์์๋ง ์ฐ์ฐ์ด ์ด๋ฃจ์ด์ง๊ณ , ๋ฐ์ดํฐ ์ด๋์ด๋ ํ์์ด ํ์์์ด O(1)๋ก ๋งค์ฐ ๋น ๋ฆ ๋๋ค.
| ๋ฉ์๋ | ์ค๋ช | ์๊ฐ ๋ณต์ก๋ |
| `push()` | ์คํ์ Top์ ์๋ก์ด ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํฉ๋๋ค. | |
| `pop()` | ์คํ์ Top์ ์๋ ๊ฐ์ฅ ๋ง์ง๋ง ๋ฐ์ดํฐ๋ฅผ ์ ๊ฑฐํ๊ณ ๊ทธ ๊ฐ์ ๋ฐํํฉ๋๋ค. | |
| `peek()` | ์คํ์ Top์ ์๋ ๋ฐ์ดํฐ๋ฅผ ์ ๊ฑฐํ์ง ์๊ณ ๋จ์ํ ํ์ธ๋ง ํฉ๋๋ค. | |
| `empty()` | ์คํ์ด ๋น์ด์๋์ง (๋ฐ์ดํฐ๊ฐ ์๋์ง) ํ์ธํฉ๋๋ค. |
์๋ฐ์ ์คํ ํด๋์ค๋ ๋ฒกํฐ ํด๋์ค๋ฅผ ์์ ๋ฐ์ `java.util.Stack`์ผ๋ก ๋ฐ๋ก ์กด์ฌํ๋๋ฐ
๋ฒกํฐ ํด๋์ค์ ๋จ์ ๋๋ฌธ์ ์ ์ฌ์ฉํ์ง ์์ต๋๋ค.
๋ฐ๋ผ์ Stack ํด๋์ค ๋์ Deque ํด๋์ค๋ฅผ ์ฌ์ฉํ ๊ฒ์ ๊ถ์ฅํ๊ณ ์์ต๋๋ค.
Deque(๋ฑ)์ ์์ชฝ ๋์ ๋ชจ๋ ์ฌ์ฉํ ์ ์๋ ํ์ธ๋ฐ, ํ์ ๋ํด์๋ ๋ค์ ๋ฌธ๋จ์์ ๋ค๋ฃจ๊ณ ์์ต๋๋ค.
๊ฐ๋จํ ๋งํ์๋ฉด, ์์ชฝ ๋์ ๋ชจ๋ ์ฌ์ฉํ ์ ์๋ ํ๋ก ๋ฑ์ ํ ์ชฝ ๋์ ์คํ์ Top์ผ๋ก ์ง์ ํ์ฌ ์ฌ์ฉํ๋ฉด ๋ฉ๋๋ค.
์๋ฐ์ Deque์์๋ ๋ฑ์ ๋งจ ์์ชฝ์ ์คํ์ Top์ผ๋ก ์ฌ์ฉํ์ฌ ๋์ํฉ๋๋ค.
/* Stack ์ฒ๋ผ ์ฌ์ฉํ๊ธฐ */
Deque<String> stack = new ArrayDeque<>();
stack.push("a");
stack.push("b");
stack.push("c");
stack.push("d");
stack.push("e");
System.out.println(stack); // [a, b, c, d, e]
System.out.println(stack.pop()); // e
System.out.println(stack.pop()); // d
System.out.println(stack); // [a, b, c]
ํ(Queue)
- ๋จผ์ ์ฝ์ ํ ๋ฐ์ดํฐ๊ฐ ๋จผ์ ๋์ค๋ ์ ์ ์ ์ถ: FIFO(First In First Out) ๊ตฌ์กฐ
- ๋ฐ์ดํฐ์ ์ฝ์ ์ ํ์ชฝ ๋(Rear ๋๋ Tail)์์ ์ด๋ฃจ์ด์ง๊ณ , ์ญ์ ๋ ๋ค๋ฅธ ์ชฝ ๋(Front ๋๋ Head)์์ ์ด๋ฃจ์ด์ง๋๋ค.
์ฃผ์ ๋ฉ์๋
| ๋ฉ์๋ | ์ญํ | ์ค๋ช | ์๊ฐ ๋ณต์ก๋ |
| `offer()` ๋๋ `add()` | ์ฝ์ (Enqueue) | ํ์ ๋งจ ๋ค(Rear)์ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํฉ๋๋ค. | |
| `poll()` ๋๋ `remove()` | ์ญ์ (Dequeue) | ํ์ ๋งจ ์(Front)์ ์๋ ๋ฐ์ดํฐ๋ฅผ ์ ๊ฑฐํ๊ณ ๊ทธ ๊ฐ์ ๋ฐํํฉ๋๋ค. | |
| `peek()` ๋๋ `element()` | ํ์ธ (Check) | ํ์ ๋งจ ์(Front) ๋ฐ์ดํฐ๋ฅผ ์ ๊ฑฐํ์ง ์๊ณ ํ์ธ๋ง ํฉ๋๋ค. |
์๋ฐ์์๋ `LinkedList` ์ธํฐํ์ด์ค๊ฐ Queue ์ธํฐํ์ด์ค๋ ํจ๊ป ๊ตฌํํ๊ณ ์์ด ํธ๋ฆฌํ๊ฒ ์ฌ์ฉํ ์ ์์ต๋๋ค.
import java.util.LinkedList;
import java.util.Queue;
public class QueueExample {
public static void main(String[] args) {
// Queue ์ธํฐํ์ด์ค๋ฅผ LinkedList๋ก ๊ตฌํํ์ฌ ์ฌ์ฉ
Queue<String> queue = new LinkedList<>();
// 1. offer: ๋ฐ์ดํฐ ์ฝ์
(FIFO: First-In)
queue.offer("๊ณ ๊ฐ A"); // 1๋ฑ์ผ๋ก ๋ค์ด์ด (Front)
queue.offer("๊ณ ๊ฐ B");
queue.offer("๊ณ ๊ฐ C"); // 3๋ฑ์ผ๋ก ๋ค์ด์ด (Rear)
System.out.println("ํ์ฌ ํ (๋๊ธฐ์ด): " + queue); // [๊ณ ๊ฐ A, ๊ณ ๊ฐ B, ๊ณ ๊ฐ C]
// 2. peek: Front ์์ ํ์ธ
System.out.println("๋๊ธฐ์ด 1์์ (peek): " + queue.peek()); // ๊ณ ๊ฐ A
// 3. poll: Front ์์ ์ญ์ ๋ฐ ๋ฐํ (FIFO: First-Out)
String servicedClient = queue.poll();
System.out.println("์๋น์ค ์๋ฃ (poll): " + servicedClient); // ๊ณ ๊ฐ A ์ ๊ฑฐ
// 4. poll ์ดํ ํ ์ํ
System.out.println("poll ํ ํ: " + queue); // [๊ณ ๊ฐ B, ๊ณ ๊ฐ C]
// 5. ๋ค์ ์์ ํ์ธ
System.out.println("๋ค์ ์์: " + queue.peek()); // ๊ณ ๊ฐ B
}
}
์ฐธ๊ณ ์๋ฃ
[์๋ฃ๊ตฌ์กฐ with C์ธ์ด] ์ฐ๊ฒฐ๋ฆฌ์คํธ (Linked List)
๐งฑ ์๋ฐ Vector ๊ตฌ์กฐ & ์ฌ์ฉ๋ฒ ์ ๋ฆฌ
๐งฑ ArrayList vs Vector ๋๊ธฐํ & ์ฑ๋ฅ ์ฐจ์ด ๋น๊ต
๐งฑ ์๋ฐ Stack ๊ตฌ์กฐ & ์ฌ์ฉ๋ฒ ์ ๋ฆฌ
