Java (2차원 배열)

최병현·2026년 1월 6일

java

목록 보기
25/38

2차원 배열(Multi-Dimensional Array) 정리

자바에서 다차원 배열은 배열 안에 배열이 들어 있는 구조를 의미한다. 실무에서는 3차원 이상 배열을 사용하는 경우가 드물기 때문에, 보통 2차원 배열을 기준으로 학습한다.

2차원 배열은 행(row)과 열(column) 구조를 가지며, 테이블 형태의 데이터를 표현할 때 자주 사용된다.


1. 2차원 배열 선언 방식

2차원 배열은 다음과 같은 방식으로 선언할 수 있다.

int[][] arr01 = new int[3][2];      // 선언 방식 #1 (행과 열 모두 지정)
int[][] arr02 = new int[3][];       // 선언 방식 #2 (행만 지정, 열은 나중에)
int[][] arr03 = {{1, 2}, {3, 4}, {5, 6}}; // 선언 방식 #3 (선언과 동시에 초기화)

2차원 배열에서 반드시 지정해야 하는 것은 행(row)의 크기이다. 열(column)은 나중에 각각 다르게 할당할 수 있다.

구조를 그림으로 표현하면 다음과 같다.

{
  {1, 2},  → 1행(row)
  {3, 4},  → 2행(row)
  {5, 6}   → 3행(row)
}


2. 2차원 배열 접근 방식

2차원 배열은 [행][열] 구조로 접근한다.

int[][] arr03 = {{1,2}, {3,4}, {5,6}};

// 값 접근
System.out.println(arr03[2][0]); // 5

2차원 배열에서 각 요소는 "배열"이기 때문에, 단순 출력 시 주소값이 출력된다.

System.out.println(arr03);        // [[I@36baf30c
System.out.println(arr03[2]);     // [I@7a81197d
System.out.println(Arrays.toString(arr03)); // [[I@..., [I@..., [I@...]

따라서 내부 값 출력은 반복문을 통해 처리해야 한다.


3. 일반 for문을 이용한 2차원 배열 출력

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

각 행(row)마다 열(column)을 순회해야 하므로 중첩 for문 구조가 된다.

1차원 배열 단위로 출력할 경우 다음과 같이 사용할 수 있다.

for (int i = 0; i < arr03.length; i++) {
    System.out.println(Arrays.toString(arr03[i]));
}

4. 향상된 for문을 이용한 2차원 배열 출력

2차원 배열도 향상된 for문을 사용할 수 있다. 단, 내부 구조가 배열이기 때문에 이중 향상된 for문이 필요하다.

for (int[] arr1 : arr03) {     // 1차 배열 단위
    for (int arr2 : arr1) {    // 각 요소 접근
        System.out.print(arr2 + " - ");
    }
    System.out.println();
}

출력 결과:

1 - 2 -
3 - 4 -
5 - 6 -

향상된 for문은 index를 사용하지 않고 값을 순차적으로 읽기만 할 때 매우 간결하다.


5. 1부터 100까지 2차원 배열에 저장하기

일반 for문을 이용해 2차원 배열에 값을 채우는 예제이다.

int[][] nums = new int[10][10];

for (int i = 0; i < nums.length; i++) {
    for (int j = 0; j < nums[i].length; j++) {
        nums[i][j] = (10 * i) + j + 1;
        System.out.print(nums[i][j] + " ");
    }
    System.out.println();
}

값 입력 후, 향상된 for문으로 출력하면 다음과 같다.

for (int[] number : nums) {
    System.out.println(Arrays.toString(number));
}

또는 다차원 배열 전용 출력 메소드인 Arrays.deepToString()을 사용할 수 있다.

System.out.println(Arrays.deepToString(nums));

6. 로또 번호 생성 – 2차원 배열 활용

기존 1차원 배열 방식:

int[] lottoNums = new int[6];

for (int j = 0; j < 5; j++) {
    for (int i = 0; i < lottoNums.length; i++) {
        lottoNums[i] = (int)(Math.random()*45 + 1);
    }
    Arrays.sort(lottoNums);
    System.out.println(Arrays.toString(lottoNums));
}
int[][] lotto = new int[5][6];

for (int i = 0; i < lotto.length; i++) {
    for (int j = 0; j < lotto[i].length; j++) {
        lotto[i][j] = (int)(Math.random() * 45) + 1;
    }
    Arrays.sort(lotto[i]);
    System.out.println(Arrays.toString(lotto[i]));
}

2차원 배열을 사용하면 여러 묶음 데이터 관리가 훨씬 직관적으로 가능하다.


7. 추가 활용 및 제약 사항

2차원 배열의 특징:

  • 행(row)은 반드시 크기를 지정해야 한다.
  • 열(column)은 각 행마다 다르게 설정할 수 있다.
  • 향상된 for문은 값 읽기 전용이며 수정에는 적합하지 않다.
  • 중첩 구조이므로 반복문 설계 시 인덱스 실수에 주의해야 한다.

8. 정리

2차원 배열은 배열 안에 배열이 들어 있는 구조로, 표 형태의 데이터를 처리할 때 매우 유용하다. 일반 for문을 사용하면 인덱스 기반 제어가 가능하고, 향상된 for문을 사용하면 가독성이 크게 향상된다.

데이터를 수정하거나 위치 기반 처리가 필요할 경우에는 일반 for문, 단순 출력이나 순차 접근만 필요할 경우에는 향상된 for문을 사용하는 것이 가장 이상적인 방식이다.

profile
Develop

0개의 댓글