CS/자료구조
자료구조: 배열(Array)
나디아 Nadia
2025. 5. 11. 16:03
배열(Array)
: 같은 종류의 데이터를 순서대로 저장하는 자료 구조
- 모든 프로그래밍 언어에서 기본적으로 제공하는 자료 구조
배열의 장단점
장점
- 읽기/쓰기와 같은 참조에는 O(1)의 성능을 가짐
단점
- 데이터 크기를 예측하거나 확정하기 어려워 메모리 낭비가 발생할 수 있음
- 데이터의 삽입, 삭제가 비효율적임
배열이 메모리에서 어떤 모습을 하고 있는지
int arr[10] = { 1, 2, 3, 4, 5 };
- 운영체제는 메모리에서 숫자 10개가 들어갈 수 있는 연속된 빈 공간을 찾아서 순서대로 1, 2, 3, 4, 5를 할당함
- 할당하지 않은 남은 공간에는 의미 없는 쓰레기 값이 저장되어 있음
배열 요소에 접근하는 방식
- 운영체제는 배열의 시작 주소(1이 들어간 주소)만 기억함
- 원하는 값에 접근하려면 인덱스로 접근함
- ex) arr[2]에 접근할 때
→ 운영체제는 배열의 시작 주소를 알고 있기 때문에 시작 주소 + 2칸 떨어진 위치의 데이터를 가져옴
- ex) arr[2]에 접근할 때
- 배열은 이렇게 인덱스를 이용한 직접 접근이 가능하기 때문에
→ 배열의 길이에 상관없이 언제나 O(1)의 성능을 가짐
👉 따라서 배열은 읽기/쓰기(참조)에 좋은 성능을 가짐 👍
배열의 크기를 확장했을 때
arr[14] = 15;
- 운영체제는 처음에 크기 10인 메모리 공간을 요청 받았고, 그에 맞는 연속된 메모리 공간을 찾아서 할당함
- 배열의 끝에는 이미 다른 데이터가 있기 때문에 더 확장할 수 없는 상황 발생
→ 운영체제는 크기 15인 연속된 공간을 다시 찾아서 새롭게 할당해야 함
→ 기존에 저장되어 있던 1~10까지의 데이터를 전부 새 메모리 공간으로 복사해야 함
👉 배열은 삽입/삭제에 성능이 좋지 않음👎
자바스크립트의 배열
- 일반적인 배열과는 조금 다름
- 자바스크립트에서 배열은 상황에 따라 연속적/불연속적으로 메모리를 할당하지만, 대부분 불연속적으로 할당함
→ 불연속적으로 할당된 메모리를 내부적으로 연결하여 사용자에게는 배열인 것처럼 보임
- 자바스크립트에서 배열은 상황에 따라 연속적/불연속적으로 메모리를 할당하지만, 대부분 불연속적으로 할당함