


| Array | Linked List | |
|---|---|---|
| 특징 | - 연속된 메모리 공간에 존재 - 컴파일 과정에서 메모리가 할당되는 정적 메모리 할당 - Stack 영역에 메모리 할당 | - 메모리 상에서 떨어져 있는 데이터들이 앞의 데이터와 뒤의 데이터를 기억하는 형태로 존재 - 런타임 환경에서 메모리가 할당되는 동적 메모리 할당 - Heap 영역에 메모리 할당 |
| 장점 | 인덱스를 통한 빠른 접근이 가능하다. | 삽입과 삭제가 용이하다. |
| 단점 | 삽입과 삭제가 오래 걸린다. 배열 중간에 있는 데이터가 삭제되면, 공간 낭비가 발생한다. | 임의 접근이 불가능하여, 처음부터 탐색을 진행해야 한다. |
| 시간복잡도 | 조회 : O(1) 삽입 및 삭제 : O(n) | 조회 : O(n) 삽입 및 삭제 : O(1) |
| 용도 | 빠른 접근이 요구되고, 데이터의 삽입과 삭제가 적을 때 | 삽입과 삭제 연산이 잦고, 검색 빈도가 적을 때 |
배열의 한계
- Array는 길이를 바꿀 수 없다.
- 길이를 바꾸기 위해서는 새로운 길이의 배열을 메모리에 따로 할당하고, 데이터를 복사한 후, 기존의 배열의 삭제하는 세 가지 과정을 거쳐야한다. (비효율적)
- Array는 데이터가 없어도 메모리를 차지하기 때문에, element 가 삭제되어도 빈자리(null)가 남게 된다. (inner fragmentation)
- 조건문을 통해 데이터가 null인 경우 삭제할 수도 있는데, 앞서 언급한 것처럼 데이터 삭제 시 O(n)의 시간복잡도를 가지기 때문에 비효율적이다.
- 연속된 메모리에 할당되기 때문에, 메모리 공간이 있음에도 outer fragmentation이 발생할 수 있다.

resize() 연산 : append() 연산 : append() 연산을 n번 진행한다고 했을 때 만큼의 시간 복잡도를 가진다. 이는 resize() 연산의 시간 복잡도가 이고 이를 평균내면 이기 때문이다.References
[자료구조] 배열과 연결리스트 (Array & LinkedList)
[자료구조] Array와 Linked List의 차이는 무엇일까?
[자료 구조] Array, Dynamic Array, Linked List