①  얕은 복사

얕은 복사(Shallow Copy) : 하나의 주소 값을 가지고 있으므로 하나라고 볼 수 있습니다 ( 그러므로 원본배열이 변경될 때 서로 간의 값이 같이 변경됩니다. )

복사한다는 의미보다는 같이 사용한다라는 의미가 됩니다.

그렇기에 대개 객체를 복사한다는 말은 얕은 복사가 아닌 깊은 복사를 의미합니다.

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

 

 

②  깊은 복사

깊은 복사(Deep Copy) : 제대로 배열을 복사하는 의미를 가지려면 배열의 깊은 복사를 하여야 합니다.

그래야 복사된 배열이나 원본배열이 변경될 때 서로 간의 값은 바뀌지 않습니다.

 

Object.clone()

public class Array_Copy{
    public static void main(String[] args)  {
        int[] a = { 1, 2, 3, 4 };
        int[] b = a.clone();
    }
}

Array.clone()을 사용하면 배열을 쉽게 복사할 수 있습니다. (깊은 복사) 가장 보편적인 방법입니다.

 

Arrays.copyOf()

import java.util.Arrays;

public class Array_Copy{
    public static void main(String[] args)  {
        int[] a = { 1, 2, 3, 4 };
        int[] b = Arrays.copyOf(a, a.length);
    }
}

Arrays클래스는 배열을 조작할 수 있는 메소드를 가진 클래스입니다. 이 클래스 안에 있는 Arrays.copyOf()를 사용하면 배열의 시작점 ~ 원하는 length까지 배열의 깊은 복사를 할 수 있습니다.

 

Arrays.copyOfRange()

import java.util.Arrays;

public class Array_Copy{
    public static void main(String[] args)  {
        int[] a = { 1, 2, 3, 4 };
        int[] b = Arrays.copyOfRange(a, 1, 3);
    }
}

Arrays.copyOf()는 배열의 처음~지정한 length까지 복사하는 메서드였다면 Arrays.copyOfRange() 메서드는 복사할 배열의 시작점도 지정할 수 있습니다.

 

System.arraycopy()

public class Array_Copy{
    public static void main(String[] args)  {
        int[] a = { 1, 2, 3, 4 };
        int[] b = new int[a.length];
        System.arraycopy(a, 0, b, 0, a.length);
    }
}

System.arraycopy() 메서드는 지정된 배열을 대상 배열의 지정된 위치에 복사합니다.

 

'Language > Java' 카테고리의 다른 글

package와 import  (0) 2022.01.02
클래스, 객체, 인스턴스 개념  (0) 2022.01.02
2차 배열  (0) 2021.12.24
반복문 (for, while문)  (0) 2021.11.29
연산자  (0) 2021.11.28