1. Deep copy (깊은 복사)

- 같은 내용의 새로운 객체를 생성, 원본의 변화에 복사본이 영향을 받지 않는다.


2. Shallow copy(얕은 복사)

- 참조변수만 복사, 원본의 변화에 복사본이 영향을 받는다.

import java.util.Arrays;

public class CopyTest {
	public static void main(String[] args) {
		int[] data = { 0, 1, 2, 3, 4, 5 };
		int[] sCopy = null;
		int[] dCopy = null;

		sCopy = shallowCopy(data);
		dCopy = deepCopy(data);

		System.out.println("Original : " + Arrays.toString(data));
		System.out.println("Shallow : " + Arrays.toString(sCopy));
		System.out.println("Deep : " + Arrays.toString(dCopy));
		System.out.println();

		data[0] = 5;
		System.out.println("Original : " + Arrays.toString(data));
		System.out.println("Shallow : " + Arrays.toString(sCopy));
		System.out.println("Deep : " + Arrays.toString(dCopy));
		System.out.println();
	} // main

	public static int[] shallowCopy(int[] arr) {
		return arr;
	} // shallowCopy

	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;
	} // deepCopy
	
} // CopyTest

/*
 * 결과 
 * 
 * Original : [0, 1, 2, 3, 4, 5]
 * Shallow : [0, 1, 2, 3, 4, 5]
 * Deep : [0, 1, 2, 3, 4, 5]
 * 
 * Original : [5, 1, 2, 3, 4, 5]
 * Shallow : [5, 1, 2, 3, 4, 5]
 * Deep : [0, 1, 2, 3, 4, 5]
 */



'Java > Java SE' 카테고리의 다른 글

Java 쓰레드(Thread)  (0) 2013.08.19
Java 이름 규칙(Naming Rule)  (0) 2013.08.16
Java 컬렉션 프레임웍(Collection Framework)  (2) 2013.08.12
Java 내부클래스(inner class)  (0) 2013.08.09
Java 예외처리(exception handling)  (1) 2013.08.08

+ Recent posts