자바 다차원 배열
목차
다차원 배열이라는 개념에서 보통사람이 인지할 수 있는 정도는 1, 2, 3, 4 차원 정도 일 겁니다. 이중에서 3차원 정도까지는 이해가 갈 것이고 4차원은 조금 별도로 연구해야할 차원일 겁니다.
거창하게 다차원 배열이라고 했지만 이 과정에서는 2차원 배열 정도를 이해하고 사용할 수 있으면 충분합니다. [ ] 연산자를 사용해서 차원을 추가한다는 방법인데 3, 4 차원으로 확장 방법은 일관성이 있으니까요. [ ] 배열 연산자를 추가하면 됩니다.
그리고 3차원 배열은 컴퓨터에서는 주로 3D 그래픽스에 사용되는데 3D 프로그래머들에게 요구되는 기술입니다.
여기서는 이차원 배열까지만 커버합니다.
이차원 배열
일차원 배열은 이미 배웠죠.
int[] myArray = new int[] { 2, 4, 6, 8, 10};
이게 일차원 배열입니다. 인덱스가 0~4 까지 직선을 따라 배열이 되있습니다. 이 숫자를 직선에서 표현한다고 가정하면요.
이차원 배열은 이게 두개 있어야 하니까 배열의 선언부터 달라집니다.
public static void main(String[] args) { int[][] array2nd = new int[2][2]; array2nd[0][0] = 5; array2nd[0][1] = 10; array2nd[1][0] = 15; array2nd[1][1] = 20; for (int i = 0; i < array2nd.length; i++) { for (int j = 0; j < array2nd[0].length; j++) { System.out.printf("%2d ", array2nd[i][j]); } System.out.println(); } }
5 10 15 20
위의 코드로 2 x 2 배열을 만들어 봅니다. 일단 [ ] [ ] 이 배열 연산자를 두개나 쓴다는 것 부터가 난관입니다. 인덱스의 범위가 달라지니까요.
i 와 j 의 사용법을 보세요. 구구단이나 별모양으로 도형만드는 것과 닮았습니다. 맞습니다. 도형자체가 스크린의 2D 그래픽스에 대응합니다. 2D 그래픽은 2차원 배열로 만들어집니다. 배열자체를 좌표로 사용할 수 있고. 그 안에 픽셀의 칼라값을 저장하는 객체를 저장하면 됩니다.
자바를 공부하다 보면 프레임워크를 사용해서 2D 게임 정도는 하나 만들어 봐야하는데 2차원 배열을 잘 알게되면 게임에 들어가는 스프라이트를 이해하기 쉽습니다.
하나씩 대입하는 것은 귀찮기 때문에 다른 방식의 초기화를 해보겠습니다.
public class Main { public static void main(String[] args) { int[][] array2D = { { 2, 4, 6}, { 8, 10, 12}, {14, 16, 18} }; for (int i = 0; i < array2D.length; i++) { for (int j = 0; j < array2D[0].length; j++) { System.out.printf("%2d ", array2D[i][j]); } System.out.println(); } } }
2 4 6 8 10 12 14 16 18
3 x 3 배열입니다. 시각적인 초기화를 할 수 있다는 점이 좋습니다. array2D.length 가 행의 길이이고 array2D[0].length 가 열의 길이입니다. array2D[i].length 를 사용해도 됩니다.
이차원배열 연습하기
이차원 배열의 경우는 머리로만 이해한다고 사용할 수는 없고 연습을 좀 해야합니다.
뭐라도 좋으니 만들어 보는게 좋습니다. 아래는 구구단을 0으로 둘러쌓는 코드입니다. 실력을 늘리고 싶으면 블록을 가지고 노는 것 처럼 여러가지를 해보시길 바랍니다.
public class Main { public static void main(String[] args) { int[][] array2D = new int[11][11]; here: for (int i = 0; i < array2D.length ; i++) { for (int j = 0; j < array2D[i].length; j++) { if (i == 10) break here; if (j == 10) { array2D[i][j] = 0; }else { array2D[i][j] = i * j; } } } for (int i = 0; i < array2D.length; i++) { for (int j = 0; j < array2D[i].length; j++) { System.out.printf("%2d ", array2D[i][j]); } System.out.println(); } } }
0 0 0 0 0 0 0 0 0 0 0 0 1 2 3 4 5 6 7 8 9 0 0 2 4 6 8 10 12 14 16 18 0 0 3 6 9 12 15 18 21 24 27 0 0 4 8 12 16 20 24 28 32 36 0 0 5 10 15 20 25 30 35 40 45 0 0 6 12 18 24 30 36 42 48 54 0 0 7 14 21 28 35 42 49 56 63 0 0 8 16 24 32 40 48 56 64 72 0 0 9 18 27 36 45 54 63 72 81 0 0 0 0 0 0 0 0 0 0 0 0
실제로 테트리스 같은 블록게임도 이배열을 사용해 만들 수 있습니다. 0과 1로 블록을 그리고 그래픽 라이브러리를 사용하여 0에는 공백을 1에는 도형을 그려넣으면 블록이 됩니다.
요약
자바 다차원 배열 그 중에서 기초가 되는 이차원 배열의 초기화와 사용법에 대하여 야간의 맛만 봤습니다. 3D 그래픽 프로그래밍 쪽으로 공부하려면 3차원 배열도 해야할텐데요. 배열과 차원에 대한 더 깊은 공부가 필요할 것 입니다.
한가지 추천하는 것은 이제 복잡한 기술로 들어가면 한글 자료와 교재가 별로 없습니다. 하지만 영어 자료는 한글 자료에 비해 넘쳐납니다. 영어 공부는 프로그래밍에 도움이 되는 수준이 아니라 매우 큰 비중을 차지한다는 점을 한 번 강조하겠습니다.
외부참조문서
자바 다차원 배열 Multidimensional Arrays in Java – GeeksforGeeks