본문 바로가기
프로그래밍 기초/Java

[Java] 2차원 배열 : 개념, 선언 방법, 및 실사용 예제

by 제이투더문 2024. 6. 15.

 

 

 안녕하세요. 2차원 배열의 내용은 짧기 때문에 배열에 이어서 포스팅하겠습니다. 2차원 배열 부분은 설명은 짧지만, 실습 예제가 꽤 복잡합니다. 반복문에서 했던 별 찍기를 떠올리면서 들어가 보도록 하겠습니다.

 

▤ 목차

     

     

     

    1. Java 2차원 배열의 필요성

     

    2차원 배열은 행(row)과 열(column)로 이루어진 배열로, 데이터 테이블이나 행렬(matrix)과 같은 구조를 표현하는 데 유용합니다. 2차원 배열을 사용하면 복잡한 데이터를 체계적으로 관리할 수 있습니다. 실제로 나중에 배울 DB(데이터집합)에서 데이터를 추출해서 화면에 출력할 때 많이 사용합니다.

     

    특징:

    • 행과 열로 이루어진 구조
    • 테이블 형태의 데이터 저장
    • 복잡한 데이터 관리 용이

     

    2차원 배열은 다음과 같은 상황에서 필요합니다:

    • 행렬 연산을 수행할 때
    • 테이블 형태의 데이터를 저장할 때
    • 게임 개발에서 보드 형태의 데이터를 관리할 때

     

    2. 2차원 배열이란?

     

     2차원 배열은 배열의 배열로, 각 요소가 또 다른 배열을 참조하는 구조입니다. 이는 데이터를 행과 열의 형태로 저장할 수 있게 해 줍니다. Java에서는 배열의 각 행이 서로 다른 크기를 가질 수 있는 비정형 배열(Jagged Array)도 지원합니다.

    특징:

    • 배열의 배열 구조
    • 행과 열의 인덱스로 접근
    • 정형 배열과 비정형 배열 지원

    2차원 배열 선언 방법

    Java에서 2차원 배열을 선언하고 초기화하는 방법은 다음과 같습니다.

     

     1. 정형 배열 선언 및 초기화

    // 정형 배열 선언
    int[][] array2D = new int[3][4];
    
    // 정형 배열 선언과 동시에 초기화
    int[][] array2D = {
        {1, 2, 3, 4},
        {5, 6, 7, 8},
        {9, 10, 11, 12}
    };

     

     2. 비정형 배열 선언 및 초기화

    // 비정형 배열 선언
    int[][] jaggedArray = new int[3][];
    
    // 각 행의 크기를 다르게 초기화
    jaggedArray[0] = new int[2];
    jaggedArray[1] = new int[3];
    jaggedArray[2] = new int[4];

     

    특징:

    • 정형 배열: 모든 행의 길이가 동일
    • 비정형 배열: 각 행의 길이가 다를 수 있음

     

    2차원 배열 접근 방법

    2차원 배열의 각 요소는 행과 열의 인덱스를 사용하여 접근할 수 있습니다.

    int[][] array2D = {
        {1, 2, 3, 4},
        {5, 6, 7, 8},
        {9, 10, 11, 12}
    };
    
    int value = array2D[1][2]; // 두 번째 행의 세 번째 요소 접근

     

    반복문을 사용하여 2차원 배열의 모든 요소에 접근할 수도 있습니다.

    for(int i = 0; i < array2D.length; i++) {
        for(int j = 0; j < array2D[i].length; j++) {
            System.out.println(array2D[i][j]);
        }
    }

     

    특징:

    • 행과 열의 인덱스를 통한 요소 접근
    • 중첩 반복문을 통한 전체 요소 접근

     

    실습

     

    (출처) 스마트인재개발원

     

     

    풀이 :

    public class Main {
    	public static void main(String[] args) {
    		// 1. 정수형 데이터를 저장할 수 있는 5행 5열 크기의 array를 선언하세요.
    		int[][] array = new int[5][5];
    		int num = 1;
    		
    		for (int i = 0; i < array.length; i++) {
    			for (int j = 0; j < array.length; j++) {
    				array[i][j] = num++;
    			}
    		}
    		
    		for (int i = 0; i < array.length; i++) {
    			for (int j = 0; j < array.length; j++) {
    				System.out.print(array[i][j] + "\t"); // 정렬을 위해서 탭만큼 띄어쓰기(4칸정도 소모)
    			}
    			System.out.println();
    		}
    	}
    }

     

    (0, 0)1 (0, 1)2 (0, 2)3 (0,3)4 (0,4)5
    (1, 0)6 (1, 1)7 (1, 2)8 (1, 3)9 (1, 4)10
    (2, 0)11 (2, 1)12 (2, 2)13 (2, 3)14 (2, 4)15
    (3, 0)16 (3, 1)17 (3, 2)18 (3, 3)19 (3, 4)20
    (4, 0)21 (4, 1)22 (4, 2)23 (4, 3)24 (4, 4)25

     

     행, 열에 맞춰서 1부터 순차적으로 출력하는 예제이기 때문에 어렵지는 않습니다.

     

     

    (출처) 스마트인재개발원

     

     

     

    풀이 :

    public class Main {
    	public static void main(String[] args) {
    		// 1. 정수형 데이터를 저장할 수 있는 5행 5열 크기의 array를 선언하세요.
    		int[][] array = new int[5][5];
    		int num = 1;
    		
    		for (int i = 0; i < array.length; i++) {
    			for (int j = 0; j < array.length; j++) {
    				array[j][i] = num++; // i와 j의 순서만 바꿔줬다.
    			}
    		}
    		
    		for (int i = 0; i < array.length; i++) {
    			for (int j = 0; j < array.length; j++) {
    				System.out.print(array[i][j] + "\t"); // 정렬을 위해서 탭만큼 띄어쓰기(4칸정도 소모)
    			}
    			System.out.println();
    		}
    	}
    }

     

     문제가 어려워졌다고 생각하지 말고, 행과 열이 바뀌었다고 보면 됩니다. 그래서 i와 j의 순서만 바꿔줬습니다. 그리고 출력되는 숫자는 1부터 25로 통일했습니다.

     

    (출처) 스마트인재개발원

     

     

    풀이 :

    public class Main {
    	public static void main(String[] args) {
    		// 1. 정수형 데이터를 저장할 수 있는 5행 5열 크기의 array를 선언하세요.
    		int[][] array = new int[5][5];
    		int num = 1;
    		
    		for (int i = 0; i < array.length; i++) {
    			if (i % 2 == 0) { // 홀수행 짝수행 구분해서 처리
    				for (int j = 0; j < array.length; j++) {
    					array[i][j] = num++;
    				}
    			} else {
    				for (int j = 4; j >= 0; j--) {
    					array[i][j] = num++;
    				}
    			}
    		}
    		
    		for (int i = 0; i < array.length; i++) {
    			for (int j = 0; j < array.length; j++) {
    				System.out.print(array[i][j] + "\t"); // 정렬을 위해서 탭만큼 띄어쓰기(4칸정도 소모)
    			}
    			System.out.println();
    		}
    	}
    }

     

     짝수행이면 → 방향으로 처리, 홀수행이면 ← 방향으로 처리하게끔 만들었습니다.

     

     

     

    (출처) 스마트인재개발원

     

     

    풀이 :

    public class Main {
    	public static void main(String[] args) {
    		// 1. 정수형 데이터를 저장할 수 있는 5행 5열 크기의 array를 선언하세요.
    		int[][] array = new int[5][5];
    		
    		int num = 1; // 계속 추가될 숫자
    		
    		int forNum = 2; // 기준점이 될 숫자
    		int forNum2 = 2; // 기준점이 될 숫자2
    		
    		for (int i = 0; i < array.length; i++) {
    			
    			for (int j = 0; j < forNum; j++) {
    				System.out.print("0");
    				System.out.print("\t");
    			}
    			
    			for (int j = forNum; j <= forNum2; j++) {
    				System.out.print(num++);
    				System.out.print("\t");
    			}
    			
    			for (int j = forNum2; j < array.length - 1; j++) {
    				System.out.print("0");
    				System.out.print("\t");
    			}
    			
    			if (i >= 2) {
    				forNum += 1;
    				forNum2 -= 1;
    			} else {
    				forNum -= 1;
    				forNum2 += 1;
    			}
    			
    			System.out.println();
    		}
    		
    	}
    }

     

     전에 for문에서 다이아몬드 별찍기 실습 기억하시나요?  그때의 소스와 비슷합니다. 다만, 해당 실습은 공백이 아니고 0이 출력되어야 해서 뒤에 0 출력 for문을 하나 더해주었습니다.

     

     

    마무리

     

    현업이 보는 2차원 배열의 필요성

    현업에서 2차원 배열은 다양한 분야에서 사용됩니다. 특히, 데이터를 테이블 형태로 저장하거나, 이미지 데이터를 행렬로 처리할 때, 게임 개발에서 보드의 상태를 관리할 때 주로 사용됩니다. 또한, 알고리즘 문제 해결에서도 2차원 배열은 매우 유용합니다.

     

     

    특징:

    • 데이터 테이블 관리
    • 이미지 및 그래픽 처리
    • 게임 개발에서 보드 상태 관리
    • 복잡한 알고리즘 구현

     

     Java에서 2차원 배열은 데이터를 행과 열의 형태로 효율적으로 저장하고 관리할 수 있는 강력한 도구입니다. 2차원 배열의 개념, 선언 방법, 초기화 및 접근 방법을 이해하고, 이를 실무에 효과적으로 적용하는 것이 중요합니다. 특히, 복잡한 데이터를 체계적으로 관리하고 처리하는 데 있어 2차원 배열은 필수적인 자료 구조입니다. 실습을 하면서 많이 어려우셨을 겁니다. 많은 반복과 연습을 통해 익숙해지시길 바랍니다.