언어/Java

[Java]배열의 복사(2차원 배열의 복사)

GAEBAL 2022. 2. 16. 23:13
728x90

깊은 복사

1차원 배열의 깊은 복사의 경우 위에서 소개한 메서드를 사용하면 쉽게 복사가 가능함. 하지만 2차원 배열의 경우 위의 메서드를 활용해도 깊은 복사가 되지 않음.

그 이유는 위와 같은 2차원 배열의 구조 a[x][y]에서 배열을 복사하는 메서드를 사용하게 되면 y좌표를 가리키는 주소 값만 있는 a부분만 깊은 복사가 되고 값이 있는 a[x][y]는 깊은 복사가 되지 않음. 그렇기에 2차원 배열을 복사하기 위해서는 for문을 돌리면서 값이 있는 a[x][y]를 일일이 복사해주어야 함.

 

이중 for문 활용

public class Array_Copy{
    public static void main(String[] args)  {
        int a[][] = {{1,2,3},{4,5,6,},{7,8,9}};
        int[][] b = new int[a.length][a[0].length];
	    
        for(int i=0; i<a.length; i++) {
            for(int j=0; j<a[i].length; j++) {
                b[i][j] = a[i][j];  
            }
        }
    }
}

2차원 객체 배열의 복사를 할 경우 arraycopy나 clone을 이용해서 복사할 수가 없음. 그렇기에 이중 포문을 복사하시려면 이중 for문을 돌면서 값을 일일이 옮겨야함.

 

System.arraycopy 활용

public class Array_Copy{
    public static void main(String[] args)  {
        int a[][] = {{1,2,3},{4,5,6,},{7,8,9}};
        int b[][] = new int[a.length][a[0].length];
	    
        for(int i=0; i<b.length; i++){
            System.arraycopy(a[i], 0, b[i], 0, a[0].length);
        }
    }
}

이중 for문이 싫으면 for문을 돌려 System.arraycopy 메서드를 이용해 2차원 배열을 복사할 수 있음. 1차원 배열을 2차원 배열의 row 길이만큼 복사함.

728x90