본문 바로가기

자료구조

[자료구조] 동적 배열(Dynamic Array)과 연결 리스트(Linked List) 차이

동적 배열 (Dynamic Array)

데이터를 순차적으로 저장하고, 크기를 동적으로 조절 할 수 있는 배열 자료 구조이다. 일반적인 배열은 선언 시 크기가 고정되지만, 동적 배열은 데이터의 삽입/삭제에 따라 자동으로 크기를 확장하거나 축소할 수 있습니다.

 

 

1. 동적 배열의 구조

동적 배열의 구조

  • 변수 : 실제 메모리 공간의 주소를 담고 있는 변수입니다.
  • 크기(Size) : 현재 배열에 저장된 요소의 개수입니다.
  • 용량(Capacity) : 배열이 재할당 없이 저장할 수 있는 최대 요소 수입니다.

 

 

2. 동적 배열의 특징

  • 일반 배열을 감싼 객체 형태(클래스)로 구현되어 있으며, 동적으로 사용할 수 있게 해주는 내부 로직들이 존재한다.
  • 배열 크기가 고정되어있지 않고 필요에 따라 자동(내부로직)으로 증가(또는 감소) 합니다.
    • 보통 요소 수가 용량(Capacity)을 초과하면 2배로 확장됩니다.
  • 일반 배열처럼 인덱스를 이용한 O(1) 시간의 빠른 접근이 가능합니다.
  • 용량이 차면, 새로운 더 큰 배열을 할당하고, 기존 데이터를 복사합니다. (메모리 낭비를 줄일 수 있다. 다만 일부 남는 공간이 존재한다.)

 

 


 

 

연결 리스트 (Linked List)

데이터를 순서대로 연결한 자료구조이다.

 

1. 연결 리스트의 구조

리스트의 구조

 

 

2. 연결 리스트 특징

  • 각 데이터는 `데이터 + 다음 데이터 주소(포인터)`를 가지고 있다.
  • 메모리에 흩어져 저장될 수 있다.
  • 웝소의 삽입/삭제가 쉽다. (각 값의 포인터가 가지고 있는 참조값을 변경)

 


 

 

3. 동적 배열 vs 연결 리스트

비교 항목 동적 배열 (Dynamic Array) 연결 리스트 (Linked List)
메모리 구조 연속된 메모리 블록 노드마다 흩어진 메모리, 포인터로 연결
접근 속도 O(1) - 인덱스로 바로 접근 가능 O(n) - 앞에서부터 순차 탐색
삽입/삭제 (중간) O(n) - 이동 필요 O(1) - 포인터만 조정(위치를 알고 있는 경우)
삽입/삭제 (끝) O(1) - (단, 재할당 발생 시 O(n)) 단일 연결 리스트는 O(n), 이중 연결 리스트는 O(1)
메모리 사용 남는 공간이 생길 수 있음 포인터 공간이 추가로 필요
메모리 재할당 배열 크기 초과 시 전체 복사 필요 (비쌈) 없음 – 필요할 때마다 노드 추가
캐시 효율성 높음 – 메모리가 연속적이어서 캐시 적중률이 높다 낮음 – 메모리가 분산되어 있음