깊은 복사를 이용하여 2차원 배열을 복사하는 방법에 대해서 알아보겠습니다.

1. Arrays.copyOf()를 이용한 방법

Arrays.copyOf(array, n)은 array 배열의 Index 0부터 n개 까지 복사한 배열을 만들어서 리턴합니다.

따라서, 아래와 같이 for문을 이용하여 2차원 배열을 복사할 수 있습니다.

  • Arrays.copyOf(originalArray[i], numCols) : 2차원 배열의 행(row) 복사
  • for문으로 모든 행(row) 복사
  • 깊은 복사를 하였기 때문에, 원본 배열의 값을 변경해도 복사된 배열에 영향을 주지 않음
import java.util.Arrays;

public class Example {

    public static void main(String[] args) {

        int[][] originalArray = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
        int numRows = originalArray.length;
        int numCols = originalArray[0].length;

        // 배열 복사
        int[][] copiedArray = new int[numRows][numCols];
        for (int i = 0; i < numRows; i++) {
            copiedArray[i] = Arrays.copyOf(originalArray[i], numCols);
        }

        // 복사된 배열 확인
        for (int[] row : copiedArray) {
            for (int num : row) {
                System.out.print(num + " ");
            }
            System.out.println();
        }
    }
}

Output:

1 2 3
4 5 6
7 8 9

2. System.arraycopy()를 이용한 방법

System.arraycopy(src, srcIndex, des, desIndex, length)는 src 배열의 srcIndex에서 length 개수만큼의 값들을 des 배열의 desIndex부터 (desIndex + length -1) 인덱스까지 복사합니다.

  • System.arraycopy(originalArray[i], 0, copiedArray[i], 0, numCols) : 배열의 행(row) 복사
  • for문으로 모든 행(row) 복사
  • 깊은 복사
public class Example {

    public static void main(String[] args) {

        int[][] originalArray = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
        int numRows = originalArray.length;
        int numCols = originalArray[0].length;

        // 배열 복사
        int[][] copiedArray = new int[numRows][numCols];
        for (int i = 0; i < numRows; i++) {
            System.arraycopy(originalArray[i], 0, copiedArray[i], 0, numCols);
        }

        // 복사된 배열 확인
        for (int[] row : copiedArray) {
            for (int num : row) {
                System.out.print(num + " ");
            }
            System.out.println();
        }
    }
}

Output:

1 2 3
4 5 6
7 8 9

3. for문을 이용한 방법

아래와 같이 2중 for문을 사용하여 직접 2차원 배열을 복사할 수 있습니다.

  • 2중 for문으로 모든 값 복사
  • 깊은 복사
public class Example {

    public static void main(String[] args) {

        int[][] originalArray = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
        int numRows = originalArray.length;
        int numCols = originalArray[0].length;

        // 배열 복사
        int[][] copiedArray = new int[numRows][numCols];
        for (int i = 0; i < numRows; i++) {
            for (int j = 0; j < numCols; j++) {
                copiedArray[i][j] = originalArray[i][j];
            }
        }

        // 복사된 배열 확인
        for (int[] row : copiedArray) {
            for (int num : row) {
                System.out.print(num + " ");
            }
            System.out.println();
        }
    }
}

Output:

1 2 3
4 5 6
7 8 9