배열(array)은 같은 타입의 변수들로 이루어진 유한 집합으로 정의할 수 있다.
배열을 구성하는 각각의 값을 배열 요소(element)라고 하며, 배열에서의 위치를 가리키는 숫자를 인덱스(index)라고 하며 자바에서 인덱스는 언제나 0부터 시작하고, 0을 포함한 양의 정수만을 가질 수 있다.
배열은 같은 종류의 데이터를 많이 다뤄야 하는 경우에 사용할 수 있는 가장 기본적인 자료 구조이다.
💎 문법
1. 배열의 선언과 생성
타입[] 배열이름 = new 타입[배열길이];
- 위 문법은 배열의 선언과 생성을 동시에 이루어지는 경우이며 위 문법과 달리 선언과 생성을 따로 할 수 있다.
2. 배열의 선언과 초기화
- 타입[] 배열이름 = {배열요소1, 배열요소2, ...};
- 타입[] 배열이름 = new 타입[]{배열요소1, 배열요소2, ...};
위 두가지 방법은 같은 결과를 나타내며 메소드의 인수로 배열을 전달하면서 초기화해야 할 경우는 위 두가지 방법 중 두번째 방법을 선택해야한다.
예제)
int[] grade1 = new int[3]; // 길이가 3인 int형 배열의 선언 및 생성
grade1[0] = 85; // 인덱스를 이용한 배열의 초기화
grade1[1] = 65;
grade1[2] = 90;
for (int i = 0; i < grade1.length; i++) {
System.out.print(grade1[i] + " "); // 인덱스를 이용한 배열로의 접근
//출력 => 85 65 90
}
다차원 배열이란 2차원 이상의 배열을 의미하며, 배열 요소로 또 다른 배열을 가지는 배열을 의미한다.
즉, 2차원 배열은 배열 요소로 1차원 배열을 가지는 배열이며,
3차원 배열은 배열 요소로 2차원 배열을 가지는 배열이고,
4차원 배열은 배열 요소로 3차원 배열을 가지는 배열인 것이다.
💎 문법
1. 타입[][] 배열이름;
2. 타입 배열이름[][];
3. 타입[] 배열이름[];
예제)
int[][] arr = new int[2][3];
int k = 10;
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
arr[i][j] = k; // 인덱스를 이용한 초기화
k += 10;
}
}
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();
}
출력)
10 20 30
40 50 60
자바에서는 2차원 배열을 생성할 때 열의 길이를 명시하지 않음으로써, 행마다 다른 길이의 배열을 요소로 저장할 수 있다.
예제)
int[][] arr = new int[3][];
arr[0] = new int[2];
arr[1] = new int[4];
arr[2] = new int[1];
// 위의 예제처럼 배열을 생성할 때 두 번째 첨자를 생략하면 가변 배열을 만들 수 있습니다.
// 다음 예제는 앞선 예제와 같은 가변 배열을 선언과 동시에 초기화 블록으로 초기화하는 예제이다.
int[][] arr = {
{10, 20},
{10, 20, 30, 40},
{10}
};
많은 데이터를 저장하기 위해서는 더욱 큰 배열을 만들고, 이전 배열의 데이터를 새로 만든 배열로 복사할 수 있다.
종류
1. System 클래스의 arraycopy() 메소드
2. Arrays 클래스의 copyOf() 메소드
3. Object 클래스의 clone() 메소드
예제)
int[] arr1 = new int[]{1, 2, 3, 4, 5};
int newLen = 10;
// 1. System 클래스의 arraycopy() 메소드
int[] arr2 = new int[newLen];
System.arraycopy(arr1, 0, arr2, 0, arr1.length);
// 2. Arrays 클래스의 copyOf() 메소드
int[] arr3 = Arrays.copyOf(arr1, 10);
// 3. Object 클래스의 clone() 메소드
int[] arr4 = (int[])arr1.clone();
💎 위 방법과 다르게 for문을 이용해서 새로 생성된 배열에 복사하는 방법도 가능하다.