다차원 배열
다차원 배열(multi-dimensional array)
다차원 배열이란 2차원 이상의 배열을 의미하며, 배열 요소로 또 다른 배열을 가지는 배열을 의미합니다.
즉, 2차원 배열은 배열 요소로 1차원 배열을 가지는 배열이며,
3차원 배열은 배열 요소로 2차원 배열을 가지는 배열이고,
4차원 배열은 배열 요소로 3차원 배열을 가지는 배열인 것입니다.
2차원 배열(two dimensional array)
2차원 배열이란 배열의 요소로 1차원 배열을 가지는 배열입니다.
자바에서는 2차원 배열을 나타내는 타입을 따로 제공하지 않습니다.
대신에 1차원 배열의 배열 요소로 또 다른 1차원 배열을 사용하여 2차원 배열을 나타낼 수 있습니다.
따라서 자바에서 2차원 배열은 다음과 같은 문법으로 선언할 수 있습니다.
문법
1. 타입[][] 배열이름;
2. 타입 배열이름[][];
3. 타입[] 배열이름[];
타입은 배열 요소로 저장되는 변수의 타입을 설정합니다.
배열 이름은 배열이 선언된 후에 배열에 접근하기 위해 사용됩니다.
다음 그림은 2차원 배열을 이해하기 쉽도록 도식적으로 표현한 그림입니다.
예제
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
위의 예제에서 사용된 arr는 2차원 배열이며, arr[i]는 arr의 각 배열 요소로 1차원 배열이 됩니다.
따라서 arr.length는 2차원 배열인 arr의 배열 요소의 총 개수를 반환하며, arr[i].length는 arr의 각 배열 요소인 1차원 배열이 가지고 있는 배열 요소의 총 개수를 반환하게 됩니다.
배열의 선언과 동시에 초기화하는 방법
1차원 배열과 마찬가지로 2차원 배열도 선언과 동시에 초기화할 수 있습니다.
자바에서는 2차원 배열의 모든 요소를 좀 더 직관적으로 초기화할 수 있습니다.
문법
타입 배열이름[행의길이][열의길이] = {
{배열요소[0][0], 배열요소[0][1], ...},
{배열요소[1][0], 배열요소[1][1], ...},
{배열요소[2][0], 배열요소[2][1], ...},
...
};
다음 예제는 앞서 살펴본 예제를 2차원 배열의 초기화 형태로 초기화하는 예제입니다.
실행 결과
10 20 30
40 50 60
가변 배열(dynamic array)
자바에서는 2차원 배열을 생성할 때 열의 길이를 명시하지 않음으로써, 행마다 다른 길이의 배열을 요소로 저장할 수 있습니다.
이렇게 행마다 다른 길이의 배열을 저장할 수 있는 배열을 가변 배열(dynamic array)이라고 합니다.
예제
int[][] arr = new int[3][];
arr[0] = new int[2];
arr[1] = new int[4];
arr[2] = new int[1];
위의 예제처럼 배열을 생성할 때 두 번째 첨자를 생략하면 가변 배열을 만들 수 있습니다.
또한, 가변 배열도 초기화 블록을 사용하여 배열을 선언과 동시에 초기화할 수 있습니다.
다음 예제는 앞선 예제와 같은 가변 배열을 선언과 동시에 초기화 블록으로 초기화하는 예제입니다.
실행 결과
10 20
10 20 30 40
10