자바 다차원 배열 | 자바 입문강좌 22

자바 다차원 배열

다차원 배열이라는 개념에서 보통사람이 인지할 수 있는 정도는 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

Leave a Comment