JAVA/JAVA 관련

자바 얕은 복사, 깊은복사 개념 및 예제

반응형

1. shallowCopy

public static int [] shallowCopy(int arr[])

return arr;


얉은 복사를 의미하고 배열이나 객체를 복사할 때 단순히 참조만 복사하는것으로써 원본이 변경되면 복사본도 같이 변경된다.



2. deep copy

public static int [] deepCopjy(int arr[]){

if (arr == null)

return null;


int  result[] = new int[arr.length];


System.arraycopy(arr, 0 , result, 0, arr.length);

return result;

}



ex)


package javas;


public class javas {

public static void main(String args[]) {


int temp[] = { 1, 2, 3, 4, 5, 6 };

int shallow[] = shallowCopy(temp);

int deep[] = deepCopy(temp);


System.out.println("original : " + toString(temp));

System.out.println("shallow Copy : " + toString(shallow));

System.out.println("deep Copy : " + toString(deep));

System.out.println();


temp[0] = 19;

System.out.println("original : " + toString(temp));

System.out.println("shallow Copy : " + toString(shallow));

System.out.println("deep Copy : " + toString(deep));

System.out.println();


}


public static int[] shallowCopy(int arr[]) {

return arr;

}


public static int[] deepCopy(int arr[]) {

if (arr == null)

return null;

int result[] = new int[arr.length];

System.arraycopy(arr, 0, result, 0, arr.length);

return result;


}


public static String toString(int temp[]) {

StringBuffer sb = new StringBuffer("[");

for (int i = 0; i < temp.length; i++)

sb.append(" " + temp[i]);

sb.append(" " + "]");

return sb.toString();

}

}




결과화면

original : [ 1 2 3 4 5 6 ]
shallow Copy : [ 1 2 3 4 5 6 ]
deep Copy : [ 1 2 3 4 5 6 ]

original : [ 19 2 3 4 5 6 ]
shallow Copy : [ 19 2 3 4 5 6 ]
deep Copy : [ 1 2 3 4 5 6 ]


반응형

'JAVA > JAVA 관련' 카테고리의 다른 글

java 객체 비교를 위한 equals 예제  (0) 2016.12.22
java 문자열 형변환  (0) 2016.12.22
java iterator 간단 사용법  (0) 2016.12.22
java HashSet 설명 및 예제  (0) 2016.12.22
Comparable vs Comparator  (0) 2016.12.22