배열(Array)은 같은 타입의 변수를 여러 개 묶어서 하나의 단위로 관리하는 자료구조다. 데이터의 수가 많아질 때 변수를 일일이 선언하는 대신 하나의 배열 변수를 통해 연속된 메모리 공간에 데이터를 저장하고 효율적으로 관리할 수 있다.
Java에서 int 자체는 기본 타입(Primitive Type)이지만, 이를 묶은 배열(int[])은 참조 타입(Reference Type)에 속하며 힙(Heap) 메모리 영역에 생성되는 객체다.
Java에서 배열을 사용하려면 변수를 선언하고, new 연산자를 이용해 메모리를 할당받아야 한다.
int[] score; // 가장 일반적으로 사용되는 방식
int score2[]; // C언어 스타일 (Java에서도 허용)
배열은 생성 시 각 요소가 타입별 기본값(int는 0, boolean은 false, 참조 타입은 null)으로 자동 초기화된다.
// 1. 크기 지정 후 생성 (기본값 0으로 초기화)
int[] numbers = new int[5];
// 2. 값 대입
numbers[0] = 10;
numbers[1] = 20;
// 3. 선언과 동시에 값으로 초기화 (가장 많이 사용)
int[] scores = { 90, 85, 95, 70, 100 };
int[] ages = new int[]{ 20, 25, 30 };
배열의 각 요소는 0부터 시작하는 인덱스를 통해 접근한다.
array[0]array[array.length - 1]주의: 배열의 범위를 벗어난 인덱스에 접근하려 하면
ArrayIndexOutOfBoundsException예외가 발생한다.
length)length 필드를 사용하면 배열의 크기(요소 개수)를 가져올 수 있다. 이는 for 문 등 반복문 처리 시 유용하다.
int[] numbers = {10, 20, 30, 40, 50};
// 일반 for 문 사용
for (int i = 0; i < numbers.length; i++) {
System.out.println("numbers[" + i + "] = " + numbers[i]);
}
// 향상된 for 문 (Enhanced for) 사용
for (int num : numbers) {
System.out.println(num);
}
행과 열로 구성된 매트릭스 형태로 데이터를 관리할 때 2차원 배열을 사용한다.
// 2행 3열 2차원 배열 선언
int[][] matrix = new int[2][3];
// 2차원 배열 값 지정 초기화
int[][] arr = {
{ 1, 2, 3 },
{ 4, 5, 6 }
};
// 중첩 for 문을 이용한 탐색
for (int i = 0; i < arr.length; i++) { // 행 반복
for (int j = 0; j < arr[i].length; j++) { // 열 반복
System.out.print(arr[i][j] + " ");
}
System.out.println();
}
Java에서 배열은 생성 후 크기를 변경할 수 없다. 더 큰 크기의 배열이 필요할 때는 기존 배열의 요소를 새로운 배열로 복사해야 한다.
가장 효율적인 방식의 배열 복사 메서드다.
int[] oldArray = { 1, 2, 3 };
int[] newArray = new int[5];
// System.arraycopy(원본, 원본시작위치, 대상, 대상시작위치, 복사개수)
System.arraycopy(oldArray, 0, newArray, 0, oldArray.length);
// newArray 결과: [1, 2, 3, 0, 0]
java.util.Arrays 클래스에서 제공하며 지정한 길이만큼 복사된 새 배열을 반환한다.
import java.util.Arrays;
int[] oldArray = { 1, 2, 3 };
int[] newArray = Arrays.copyOf(oldArray, 5);
// newArray 결과: [1, 2, 3, 0, 0]
0부터 시작하며, 배열의 길이는 .length로 확인할 수 있다.ArrayList 등의 컬렉션 프레임워크를 활용해야 한다.