Deep copy and shallow copy of array
이번 Posting에서는 배열에 대해서 정리를 해보자.
배열의 기본적인 것은 제처 두고!! 배열의 복사에 대해서 얘기를 할 것이다.
JAVA에는 깊은 복사와 얕은 복사 두 가지 방법의 복사가 있는데, 우선 얕은 복사부터 살펴보자.
얕은 복사는 함수를 통해서 return을 받거나 arr2 = arr1 이런식으로 대입을 통해서 참조 변수의 값만 전달하면 되는 것이다.
반면, 깊은 복사는 배열의 값을 직접 복사를 방법인데 for문을 통해 직접 값에 접근하여 복사를 행하거나 System.arraycopy() 함수를 통해서 깊은 복사를 행할 수 있다. 다음의 예제를 보면 확실히 알 수 있을 것이다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | public class CopyArray { public static void main(String[] args) { int[] origin = {1,2,3,4,5}; int[] deepCopiedArray = deepCopy(origin); int[] shallowCopiedArray = shallowCopy(origin); for (int i = 0; i < origin.length; i++) { System.out.print(origin[i] + " "); } System.out.println(); for (int i = 0; i < deepCopiedArray.length; i++) { System.out.print(deepCopiedArray[i] + " "); } System.out.println(); for (int i = 0; i < shallowCopiedArray.length; i++) { System.out.print(shallowCopiedArray[i] + " "); } System.out.println(); origin[2] = 22; for (int i = 0; i < origin.length; i++) { System.out.print(origin[i] + " "); } System.out.println(); for (int i = 0; i < deepCopiedArray.length; i++) { System.out.print(deepCopiedArray[i] + " "); } System.out.println(); for (int i = 0; i < shallowCopiedArray.length; i++) { System.out.print(shallowCopiedArray[i] + " "); } } private static int[] shallowCopy(int[] arr) { return arr; } private static int[] deepCopy(int[] arr) { int[] copiedArray = new int[arr.length]; System.arraycopy(arr, 0, copiedArray, 0, arr.length); return copiedArray; } } |