참조자료형 - 3. 2차원 배열

1. 2차원(정방행렬) 배열

- 가로 및 세로 방향으로 정렬된 배열

    ※ 선언 시, 배열의 첫 번째 특징(동일한 자료형 저장)이 나타나야 함

 

2. 2차원(다차원) 배열의 선언

 - 자료형[ ][ ] 변수명 or 자료형 변수명[ ][ ] or 자료형[ ] 변수명[ ]

 

3. 2차원(정방행렬) 배열의 객체 생성

  - 방법 1 (배열 객체의 생성 + 값 대입)

// 기본 문법 구조
자료형[][] 참조변수명 = new 자료형[행의 길이][열의 길이];
참조변수명[0][1] = 값;
참조변수명[0][1] = 값;
	...
참조변수명[행의 길이 - 1][열의 길이 - 1] = 값;

// Example
int[][] arr = new int[3][4];
arr[0][0] = 1;
arr[0][1] = 2;
arr[0][2] = 3;
arr[1][0] = 4;
arr[1][1] = 5;
arr[1][2] = 6;
System.out.println(arr.length);			// 3 (열의 개수)
System.out.println(arr[0].length);		// 4 (0열의 행의 개수)
System.out.println(arr[1].length);		// 4 (1열의 행의 개수)

 

 - 방법2. 2차원 배열 객체의 행 성분(1차원 배열)만 생성 or 각 행에 열 성분(1차원 배열) 생성

// Example
int[][] arr = new int[3][];
arr[0] = new int[4];
arr[1] = new int[4];
arr[2] = new int[4];

// or
int[][] arr = new int[3][];
arr[0] = new int[]{1, 2, 3};
arr[1] = new int[]{4, 5, 6};
arr[2] = new int[]{7, 8, 9};

 

 - 방법 3. (값 대입)자료형과 대입할 값만 입력

// 기본 문법 구조
자료형[][] 참조변수명 = new 자료형[][] {{값, 값, ..., 값}, ..., {값, 값, ..., 값};

// Example
int[][] arr = new int[][] {{1, 2}, {3, 4, 5}};

 

 - 방법 4. (값 대입) 대입할 값만 입력

// Example
int[][] arr = {{1, 2}, {3, 4, 5}};

 

4. 2차원(비정방행렬) 배열

 - 행마다 열의 개수가 서로 다른 2차원 행렬

    ※ 비정방 행렬은 활용도가 낮음

 - 방법 1. 2차원 배열 객체의 행 성분(1차원 배열)만 생성 or 각 행에 열 성분(1차원 배열) 생성

// Example
int[][] arr = new int[2][];
arr[0] = new int[2];
arr[0][0] = 1;
arr[0][1] = 2;
arr[1] = new int[3];
arr[1][0] = 3;
arr[1][1] = 4;
arr[1][2] = 5;

// or
int[][] arr = new int[2][];
arr[0] = new int[]{1, 2};
arr[1] = new int[]{3, 4, 5};

 

 - 방법 2. (값 대입)자료형과 대입할 값만 입력

// 기본 문법 구조
자료형[][] 참조변수명 = new 자료형[][] {{값, 값, ..., 값}, ..., {값, 값, ..., 값};

// Example
int[][] arr = new int[][] {{1, 2}, {3, 4 ,5}};

 

 - 방법 3. (값 대입) 대입할 값만 입력

    ※ 방법 3의 경우 1차원 배열과 마찬가지로 선언과 동시에 값을 대입하는 경우만 가능 (분리 불가능)

// 기본 문법 구조
자료형[][] 참조변수명 = {{값, 값, ..., 값}, …, {값, 값, ..., 값};

// Example
int[][] arr = {{1, 2}, {3, 4 ,5}};

 

5. 2차원 배열의 출력

 - for 반복문을 이용한 2차원 배열 데이터 읽기
    ※ 다차원 배열 읽기는 for문의 중첩으로 주로 처리

// Example
int[][] arr = {{1, 2, 3}, {7, 8, 9}};			// 2행 3열의 2차원 배열 (다차원 배열 이라고도 함)
for (int row = 0; row < arr.length; row++) {		// row가 행의 개수보다 작아야함
	for (int col = 0; col < arr[i].length; col++) {	// col은 각 행의 길이보다 작아야함
    	System.out.println(arr[row][col]);
    }
}
// 결과 :
// 1
// 2
// 3
// 7
// 8
// 9

 

for-each 반복문을 이용한 2차원 배열 데이터 읽기

// Example
int[][] arr = {{1, 2}, {3, 4, 5}};
for (int[] row : arr) {
	for (int col : row) {
		System.out.println(col);
	}
}
// 결과 :
// 1
// 2
// 3
// 4
// 5

 

- 연습문제

// 3행 4열 2차원 배열 만들기 (배열명 : arr)
// 배열의 각 칸에는 순차적으로 1부터 12까지 저장
// 단, 저장은 for문의 중첩을 활용해 처리
// 저장을 마친 뒤, 다시 for문의 중첩으로 읽기

int[][] arr = new int[3][4];
int number = 1;
for (int row = 0; row < arr.length; row++) {
	for (int col = 0; col < arr[row].length; col++) {
		arr[row][col] = number;
		number++;
	}
}
for (int i = 0; i < arr.length; i++) {
	for (int = j; j < arr[i].length; j++) {
		System.out.println(arr[i][j]);
	}
}
// 결과 :
// 1
// 2
// 3
// 4
// 5
// 6
// 7
// 8
// 9
// 10
// 11
// 12