컴퓨터 공학 (Computer Science)/자료구조 (Data Structure)
[자료구조] 배열(Array)
Tarake
2024. 8. 28. 10:30
배열 (Array)이란?
배열(Array)은 자료형이 같은 데이터 요소들을 연속적으로 메모리에 저장하는 자료 구조입니다.
예를 들어
계절 봄, 여름, 가을, 겨울로 각각의 변수로 선언하면 개별적으로 변수를 만들어 사용해야 합니다. 하지만 배열로 묶어서 만들면 배열을 한 번만 선언해 만들 수 있고, 배열의 요소가 되므로 다루기 편해집니다.
배열의 요소를 구별하기 위해 인덱스를 사용하고 배열의 요소를 사용할 때는 배열 이름[인덱스] 형식으로 사용합니다.
배열 사용 시 주의 사항으로는
1. 배열의 인덱스는 0부터 시작합니다.
● 예를 들어, int arr[5]; 라는 배열의 인덱스 범위는 0 ~ 4 입니다.
2. 배열의 크기를 초과한 인덱스 접근은 오류를 발생시킵니다.
● C언어에서는 경고 없이 메모리 침범이 발생할 수 있으니 주의가 필요합니다.
배열의 기본 구조
프로그래밍 언어에 따라 배열을 선언하는 방식은 다르지만 C언어와 Java 언어로 예시를 들면 다음과 같습니다.
C언어
자료형 배열이름 [배열 요소의 개수];
Java언어
자료형[] 배열이름 = new 자료형 [배열 요소의 개수];
- 자료형 : 배열의 배열 요소는 모두 자료형이 같아야 하고, 배열 요소의 자료형이 배열의 자료형이 됩니다.
- 배열이름 : 변수 이름과 같은 규칙으로 정합니다.
- 배열 요소의 개수 : 대괄호( [ ] )를 사용해 배열 요소의 개수를 표시하는데, 배열 요소의 개수가 배열의 크기이며 메모리에 할당되는 크기는 '자료형 메모리 할당 크기 x 배열 요소의 개수' 가 됩니다.
- 예시로 int a[100] 로 선언했다면 메모리에 할당된 크기는 4byte x 100이 됩니다.
배열의 메모리 할당
메모리 상에 존재하는 배열을 그림으로 그리면 다음과 같습니다.
그림을 예시를 들면서 설명하면 int a[10] 배열을 선언했다고 가정합니다.
힙 메모리에 int 형 데이터 요소 10개를 저장할 수 있는 연속된 메모리가 할당됩니다. 이렇게 할당된 배열의 시작 주소값은 개발자가 직접 확인할 수 없으므로, 주소값을 저장하기 위해 스택 메모리에 배열을 가리키는 포인터 변수를 생성하여 사용합니다.
다차원 배열
다차원 배열(Multi-Dimensional Array)은 배열 안에 배열이 포함된 형태의 배열을 의미합니다 이를 통해 2차원 이상의 데이터를 구조적으로 저장할 수 있습니다.
여기서는 모양 즉, 1차원은 선, 2차원은 면, 3차원은 입체 형식으로 설명하는 것이 아닌 메모리 구조로 설명하고자 합니다.
많은 사람들과 자료구조 서적에서는 다차원 배열을 1차원, 2차원, 3차원 예시로 설명합니다. 하지만 3차원 이상인 4차원 부터는 이런 설명으로는 이해하기 어려워집니다. 그래서 메모리 상의 구조로 다차원 배열을 이해하고자 합니다
다차원 배열의 메모리 구조
메모리 한 공간을 할당받았다고 가정합니다.
할당된 메모리 공간을 int 다음으로 오는 대괄호 [2] 를 보고 2등분하면 1차원 배열이 됩니다.
[2] 다음 대괄호인 [3] 을 보고 2등분 했던 공간을 각각 3등분하면 2차원 배열이 됩니다.
[3] 다음 대괄호인 [2]을 보고 3등분했던 공간을 각각 2등분하면 3차원 배열이 됩니다.
배열의 장점과 단점
장점
- 효율적인 데이터 관리 : 여러 개의 데이터를 하나의 변수로 관리 가능
- 빠른 접근 속도 : 인덱스를 통해 O(1) 시간 복잡도로 값에 접근 가능
단점
- 고정된 크기 : 배열의 크기를 선언 시점에 지정해야 함
- 동일한 데이터 타입만 저장 가능 : 서로 다른 타입의 데이터를 저장하려면 다른 자료 구조가 필요함
최종 수정일 : 2025-01-18