다차원 배열
다차원 배열이란 '2차원 이상의 배열, 즉 배열의 요소로 또 다른 배열을 가지는 배열'을 말한다. 중첩할 수 있는 차원의 제한은 없지만, 주로 2차원 배열까지만 사용하고 3차원 이상의 배열은 잘 사용하지 않는다.
해당 포스트는 배열(1차원 배열)에 대해 이해하고 있다고 가정하고 설명하고 있으므로, 만약 배열이 뭔지 모른다면 아래의 포스트를 확인하고 오는 것을 추천한다.
배열
배열(array)이란? 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것 배열은 많은 양의 데이터를 저장하고 관리하기 위한 가장 기초적이면서 중요한 자료구조이다. 만약 10,000개의 데이터를 저
doshiwa-dev.tistory.com
2차원 배열의 선언과 인덱스
2차원 배열을 선언하는 방법은 1차원 배열에 대괄호[ ]를 하나 더 넣는 것뿐이다.
// 방법1
타입[][] 변수이름;
// 방법2
타입 변수이름[][];
// 방법3
타입[] 변수이름[];
1차원 배열과 마찬가지로 2차원 배열임이 명확히 드러나는 방법 1을 주로 사용한다.
2차원 배열은 행과 열로 이루어져 있는 테이블 또는 행렬의 모습을 생각하면 된다.
int[][] score = new int[4][3];
예를 들어 4행 3열의 2차원 배열을 생성하면, 아래의 그림과 같은 형태가 된다.
실제로 2차원 배열이 저장되는 방식은 아래와 같지만, 일반적으로 사용할 때는 위와 같이 테이블의 형태로 생각하는 게 직관적이고 이해하기 쉽다. 따라서 쉽게 테이블의 형태로 값을 저장한다고 생각하되, 행 배열은 실제 값이 아닌 열 배열의 주소를 저장하고 있는 참조 변수의 배열이라는 것만 기억하면 된다.
2차원 배열의 초기화
2차원 배열의 초기화도 1차원 배열과 마찬가지로 반복문 또는 직접 초기화가 가능하다.
for (int i = 0; i < score.length; i++) { // 행 배열의 길이만큼 반복
for (int j = 0; j < score[i].length; j++) { // 열 배열의 길이만큼 반복
score[i][j] = (i * 3) + (j + 1);
}
}
int[][] score = {{1, 2, 3}, {4, 5, 6}};
int[][] score = {
{1, 2, 3},
{4, 5, 6}
}; // 이렇게 작성하는 것을 추천한다.
2차원 배열의 출력
2차원 배열의 출력도 마찬가지로 1차원 배열과 크게 다르지 않다.
하지만 배열의 배열인 만큼 출력할 수 있는 방법이 조금 더 다양하다.
아래는 2차원 배열을 출력할 수 있는 몇 가지 예시이다.
// 방법1 - for문
for (int i = 0; i < score.length; i++) {
for (int j = 0; j < score[i].length; j++) {
System.out.print(score[i][j] + " ");
}
System.out.println();
}
// 방법2 - 향상된 for문
for (int[] arr : score) {
for (int i : arr) {
System.out.print(i + " ");
}
System.out.println();
}
// 방법3 - 향상된 for문 + Arrays.toString()
for (int[] arr : score) {
System.out.println(Arrays.toString(arr));
}
// 방법4 - Arrays.deepToString()
System.out.println(Arrays.deepToString(arr));
// 단, 방법4는 한 줄로 출력되므로, 만약 줄 바꿈이 필요하면 방법3을 추천한다.
가변 배열
2차원 이상의 배열은 '배열의 배열'이기 때문에 자유로운 형태의 배열을 구성할 수 있다.
다시 말해 'N행 M열의 고정 크기 배열'이 아니라, '각 행의 길이가 다른 다차원 배열'을 구성할 수 있다.
가변 배열을 선언하고 생성하는 방법은 다음과 같다.
int[][] score = new int[5][]; // 1. 열의 길이를 지정하지 않는다.
// 2. 각 행을 대상으로 원하는 길이의 배열을 생성한다.
score[0] = new int[4];
score[1] = new int[3];
score[2] = new int[5];
...
가변 배열도 일반적인 2차원 배열과 마찬가지로 한 번에 생성과 초기화를 할 수 있다.
int[][] score = {
{100, 100, 100, 100},
{20, 20, 20},
{30, 30},
{50, 50, 50}
};