카테고리 없음
DeepCopy vs Shallow Copy
한둥둥
2023. 9. 27. 18:29
Deep Copy는 단어 뜻 그대로 직역하면 '깊은 복사' , shallow copy는 ' 얕은 복사'인데 배열이나 객체를 복사할 때, 단순히 참조만 복사하는 것을 shallow copy, 원본과 같은 데이터를 저장하고 있는 새로운 객체나 배열을 생성하는 것을 deep copy라고 한다.
shallow copy 경우 원본이 변경되면 복사본도 같이 변경되는 것과 같은 결과를 얻고, deep copy의 경우 원본의 데이터가 바뀐다 할지라도 복사본은 완전히 독립적인 객체이므로 전혀 영향을 받지 않는다.
public Object[] toArray() {
Object[] result = new Object[size];
System.arraycopy(data, 0, result, 0, size);
return result;
}
위에 있는 코드는 깊은 복사를 통해 배열을 복사하는 코드이다. toArray()를 호출하면 Object[] result 배열과 똑같은 배열을 생성하여 반환해주고 있다.
shallow copy로 바꾼다면
public Object[] toArray() {
return data;
}
단순히 Object배열의 참조만을 넘겨주면 된다.
import java.util.Arrays;
public class CopyTest {
public static void main(String[] args) {
int[] data = {0, 1, 2, 3, 4};
int[] shallowCopy = null;
int[] deepCopy = null;
shallowCopy= shallowCopyMehotd(data);
deepCopy = deepCopyMethod(data);
System.out.println("Original Data : " + Arrays.toString(data));
System.out.println("shallowCopy Method After Data : " + Arrays.toString(shallowCopy));
System.out.println("DeepCopy Method After Data : " + Arrays.toString(deepCopy));
System.out.println();
data[0] = 10;
System.out.println("==== Input Data index [0] ====");
System.out.println("Original Data : " + Arrays.toString(data));
System.out.println("shallowCopy Method After Data : " + Arrays.toString(shallowCopy));
System.out.println("DeepCopy Method After Data : " + Arrays.toString(deepCopy));
}
public static int[] shallowCopyMehotd(int[] arr) {
return arr;
}
public static int[] deepCopyMethod(int[] arr) {
if(arr==null) return null;
int result[] = new int[arr.length];
System.arraycopy(arr, 0, result, 0, arr.length);
return result;
}
}