- 동일한 데이터 타입을 갖는 여러 요소들을 연속적인 위치에 저장하는 자료구조
특징
- 고정된 크기 : 배열은 선언시 사이즈를 정하기 때문에 생성 후 변경할 수 없다
- 빠른 접근 : 인덱스를 통해 O(1) 시간 복잡도로 특정 요소에 접근 가능하다
- 인덱스는 시작점부터 상대적인 위치를 나타내는데, 시작 주소가 100이라 치고 각 정수 요소가 4byte를 차지한다면 인덱스 3의 주소는 100 + 4*3 = 112가 된다
- 연속적인 메모리 할당 : 모든 데이터 요소가 메모리 상에서 연속적으로 위치해 있다
연결 리스트와 차이
- 배열은 고정된 크기를 가지지만, 연결 리스트는 동적으로 조절이 가능하다
- 배열은 연속적인 위치로 데이터를 저장하지만, 연결 리스트는 포인터로 요소들을 연결하기에 메모리에 연속적일 필요가 없다
- 그래서 연결 리스트가 삽입, 삭제에 대해선 더 유연하지만, 특정 요소 접근은 노드를 순차적으로 탐색해야 하기에 배열이 더 빠른 편이다
장점과 단점
- 배열은 데이터에 빠르게 접근할 수 있고, 구현이 간단하다
- 허나 크기가 고정이기에 선언할땐 최대 길이를 지정해야 하고, 수정을 할려면 새 배열을 생성하여 데이터를 복사해야 하는데, 이는 추가적인 메모리와 시간을 요구하게 된다
예시 코드
val numbers: Array<Int> = arrayOf(1, 2, 3, 4, 5)
println("세 번째 요소: ${numbers[2]}") // 3