배열의 복사

얕은 복사와 깊은 복사

배열의 복사에는 얕은 복사와 깊은 복사가 있다.

얕은 복사는 한쪽에서 수정이 발생하면 다른 한쪽에 그대로 반영된다.

깊은 복사는 각각 다른 참조 값을 가진다. 서로 다른 배열이기 때문에 한쪽에서 수정이 일어나도 다른 쪽에는 영향이 없다.

얕은 복사(Swallow copy)

대입 연산자 "="는 얕은 복사를 수행한다.

// 대입 연산자 사용
int[] arr1 = {1, 2, 3};
int[] arr2 = arr1;

arr2[0] = 100; // 수정
sout(arr[0])   // arr[0] = 100 출력, 원본 배열도 수정됨


// clone() 사용
int[] arr1 = {1, 2, 3};
int[] arr2 = arr1.clone();

arr2[0] = 100; // 수정
sout(arr[0])   // arr[0] = 1 출력, 원본 배열은 그대로.

깊은 복사(Deep copy)

1차원 배열에서는 clone() 메소드를 사용해서 깊은 복사가 가능하다.

원시 타입 2차원 배열은 System.arraycop() 메소드를 사용해서 깊은 복사가 가능하다.

System.arraycopy(int src, int srcPos, int dst, int dstPos, int length)

  • src : 복사할 배열

  • srcPos : 복사를 시작할 처음 위치

  • dst : 복사된 값을 저장할 배열. 즉, copy 배열

  • dstPost : 복사된 값을 저장할 처음 위치

  • length : 복사할 요소의 수

원시 자료형이 아닌 2차원 배열은 arraycopy()를 사용할 수 없다. 1차원 객체 배열처럼 각 객체의 값을 참조해서 new 연산자로 객체 생성 후 대입해야 한다.

Last updated