0. 들어가며
개발을하며 정말 많이 볼 수 있는 Array와 Linked List에 대한 설명과 특징들에 대하여 기술하겠습니다.
1. Array의 특징
- 배열은 메모리상 연속된 공간에 순차적으로 미리 할당된 크기만큼 저장하는 자료구조 입니다.
- 기존 size 보다 더 많은 데이터를 저장하려면 사이즈를 재설정하는 과정이 필요합니다.
- 조회가 빨라서 해당 작업이 많이 사용될때 좋은 자료구조입니다.
- 크기를 미리 정해야하므로 메모리 공간의 낭비나 overhead가 발생할 수 있습니다.
- 이를 예방하기위해 동적으로 배열의 크기를 조절하는 Dynamic Array를 사용할 수 있습니다.
더보기
Dynamic Array
- 저장공간이 가득 차게되면 doubling등의 resizing을 통해 동적으로 크기를 조절하는 자료구조
- LinkedList와 비교했을 때
- 조회, 할당(get): O(1)
- 마지막 원소에 데이터 추가, 삭제: O(1)
- 마지막이 아닌 원소 데이터 추가, 삭제: O(n)
- resize를 진행할때 overhead 발생
2. Linked List의 특징
- Linked List는 Node라는 구조체로 이루어져있는데, 각 Node는 데이터와 다음 원소의 주소값을 저장합니다.
- 물리적 메모리상 비연속적으로 저장되어있지만 주소값을 가져 논리적 연속성을 가집니다.
- 데이터가 추가되는 시점에 메모리를 할당하여, 메모리 공간을 효율적으로 사용할 수 있습니다.
- 주소값을 추가로 저장해야하므로 메모리 공간 또한 추가적으로 사용됩니다.
3. 두 자료구조의 비교
Array | LinkedList | |
조회, 할당 | O(1) | O(n) |
마지막 원소에 추가, 삭제 | O(1) | O(1) |
마지막이 아닌 원소에 추가, 삭제 | O(n) | O(1) |
- LinkedList의 원소 추가 및 삭제의 경우 O(1)이지만 실질적으로 추가 및 삭제하려는 원소의 index까지 이동해야하므로 전체 과정은 O(n)이라고 할 수 있습니다.
- Array의 경우 마지막 원소에 추가, 삭제는 동적Array를 가정했습니다. 동적 Array의 경우 배열 사이즈보다 많은 원소를 추가하면 더블링을 통해 배열을 리사이징하게됩니다. 이때 더블링은 O(n)이 필요합니다
- 두 자료구조 모두 Heap영역에 할당이 일어납니다
4. 결론
조회 및 할당을 많이 하는 경우에 Array를 사용하는것이 좋습니다. 그 외에 전체 데이터 크기를 단언 하기 힘들거나 삽입 삭제를 자주할때 LinkedList를 사용하는것이 좋습니다.
'Computer Science' 카테고리의 다른 글
프로세스 발전의 흐름 (0) | 2023.11.23 |
---|