다차원 배열
대괄호의 개수에 따라 차원의 수가 결정된다.
주로 [] 1차원, [][] 2차원 배열이 사용되고 3차원 이상의 고차원 배열은 잘 사용되지 않는다.
그 중 2차원 배열을 살펴보자.


선언
타입[][] 변수이름;
타입 변수이름[][];
타입[] 변수이름[];
1차원 배열에 대괄호가 하나 더 늘어났다.
2차원 배열은 주로 테이블 형태의 데이터를 담는데 사용된다.
int[][] array;
int array[][];


생성
2차원 배열은 행(row)과 열(column)로 구성되어 있다.
int[][] array = new int[2][3];

  열0 열1 열2
행0 0 0 0
행1 0 0 0
•  index
    index도 행과 열에 각각 하나씩 존재한다.
    행 index 범위 :  0 ~ 행의 길이-1
    열 index 범위 :  0 ~ 열의 길이-1
    저장 공간은 행 index * 열 index 만큼 생성된다.
  열0 열1 열2
행0 array[0][0] array[0][1] array[0][2]
행1 array[1][0] array[1][1] array[1][2]
•  값 출력
int array[][] = new int[2][3];
array[1][1] = 5;
Log.d("TAG_", array[1][1] + "");    // 5


초기화
괄호{ }로 행을 구분한다.
int[][] arr = new int[][]{ {1, 2, 3, 4}, {5, 6, 1, 2}, {3, 4, 5, 6} };
int[][] arr = { {1, 2, 3, 4}, {5, 6, 1, 2}, {3, 4, 5, 6} };

행마다 줄 바꿈을 해주면 가독성이 좋아진다.
int[][] arr = {
        {1, 2, 3, 4},
        {5, 6, 1, 2},
        {3, 4, 5, 6}
};


형태
배열의 배열.
여러 개의 1차원 배열을 묶어서 또 하나의 배열로 만든 것.
arr
0x100
arr[0] arr[1] arr[2]
0x200 0x300 0x400
  arr[0][0] arr[0][1] arr[0][2] arr[0][3]
0x200 1 2 3 4
  arr[1][0] arr[1][1] arr[1][2] arr[1][3]
0x300 5 6 1 2
  arr[2][0] arr[2][1] arr[2][2] arr[2][3]
0x400 3 4 5 6
•  arr.length = 행의 개수. 3
•  arr[index].length = 행index의 열의 개수. 4


가변 배열
2차원 이상의 다차원 배열을 생성할 때 전체 배열 차수 중 마지막 차수의 길이를 지정하지 않고,
추후에 각기 다른 길이의 배열을 생성하여 유동적인 배열을 구성할 수 있다.
int[][] arr = new int[2][];       // arr.length = 2
arr[0] = new int[3];	          // arr[0].length = 3
arr[1] = new int[1];	          // arr[1].length = 1

•  초기화
int[][] arr = {
        {1, 2, 3, 4},
        {5, 6},
        {3, 4, 5}
};




참고 서적: 자바의 정석 3판