자바 배열의 복사란?
배열은 여러 개의 값을 저장하기 위한 자료구조로, 자바에서도 매우 유용하게 사용됩니다. 때때로 우리는 배열의 내용을 다른 배열에 복사해야 할 수도 있습니다. 배열을 복사하는 방법은 크게 두 가지로 나뉩니다: 깊은 복사(deep copy)와 얕은 복사(shallow copy).
깊은 복사(deep copy)
깊은 복사란, 원본 배열의 값을 복사하여 새로운 배열을 생성하는 방법을 말합니다. 이 방법은 새로운 배열의 값이 원본 배열의 값과 동일하게 복사되기 때문에 두 배열은 서로 독립적입니다.
깊은 복사를 수행하기 위해서는 Arrays
클래스의 copyOf
메서드를 사용하면 됩니다. 이 메서드는 원본 배열과 동일한 길이의 새로운 배열을 생성하여 값을 복사합니다. 다음은 copyOf
메서드를 사용한 깊은 복사의 예시입니다:
int[] originalArray = {1, 2, 3, 4, 5};
int[] copiedArray = Arrays.copyOf(originalArray, originalArray.length);
위의 예시에서, originalArray
배열의 값은 {1, 2, 3, 4, 5}
이며, copiedArray
배열은 {1, 2, 3, 4, 5}
와 동일한 값을 가집니다. 이제 originalArray
와 copiedArray
는 각각 독립적인 배열입니다.
얕은 복사(shallow copy)
얕은 복사란, 배열의 주소값만 복사하여 새로운 배열을 생성하는 방법을 말합니다. 이 방법은 새로운 배열은 원본 배열과 동일한 메모리를 참조하기 때문에 두 배열은 서로 영향을 받습니다.
얕은 복사를 수행하기 위해서는 System
클래스의 arraycopy
메서드를 사용하면 됩니다. 이 메서드는 원본 배열의 일부 또는 전체 요소를 대상 배열로 복사합니다. 다음은 arraycopy
메서드를 사용한 얕은 복사의 예시입니다:
int[] originalArray = {1, 2, 3, 4, 5};
int[] copiedArray = new int[originalArray.length];
System.arraycopy(originalArray, 0, copiedArray, 0, originalArray.length);
위의 예시에서, originalArray
배열의 값은 {1, 2, 3, 4, 5}
이며, copiedArray
배열도 {1, 2, 3, 4, 5}
와 동일한 값을 가지지만, 두 배열은 같은 메모리를 참조합니다. 따라서 originalArray
또는 copiedArray
중 하나의 배열을 수정하면 다른 배열도 영향을 받습니다.
종합
자바에서 배열을 복사하는 방법에는 깊은 복사와 얕은 복사가 있습니다. 깊은 복사는 원본 배열의 값을 복사하여 새로운 배열을 생성하는 방법이며, 얕은 복사는 배열의 주소값만 복사하여 새로운 배열을 생성하는 방법입니다.
깊은 복사를 위해 Arrays.copyOf
메서드를 사용하고, 얕은 복사를 위해 System.arraycopy
메서드를 사용할 수 있습니다.
배열을 복사할 때는 복사된 배열이 원본 배열과 어떻게 상호작용하는지 확인해야 합니다. 깊은 복사는 원본 배열과 복사된 배열이 서로 독립적으로 존재하므로 상호작용이 없습니다. 반면, 얕은 복사는 원본 배열과 복사된 배열이 동일한 메모리를 참조하므로 하나를 수정하면 다른 하나도 영향을 받습니다.
배열을 복사할 때는 프로그램 요구사항에 맞는 방법을 선택하여 사용해야 합니다.
댓글