deep copy with serialization in java

일반적으로 객체를 deep copy 하기 위해서는 Cloneable을 implements 해서 clone 메서드를 구현한다.

Deep copy를 하는 단계는 다음과 같다.
1. clone 메서드에서 카피할 오브젝트를 shallow copy
2. 카피할 객체에 레퍼런스 되어 있는 클래스의 오브젝트들도 shallow copy

위 방식과 다르게, 객체를 직렬화해서 저장하고 저장된 파일을 읽어서 다시 객체로 바인딩해서 객체를 deep copy하는 방법도 있고 아래 코드가 이 방식으로 객체를 deep copy한다.

ObjectCloner.java

import java.io.*;
public class ObjectCloner {
	// so that nobody can accidentally create an ObjectCloner object
	private ObjectCloner() {
	}

	// returns a deep copy of an object
	static public Object deepCopy(Object oldObj) throws Exception {
		ObjectOutputStream oos = null;
		ObjectInputStream ois = null;
		try {
			ByteArrayOutputStream bos = new ByteArrayOutputStream(); // A
			oos = new ObjectOutputStream(bos); // B
			// serialize and pass the object
			oos.writeObject(oldObj); // C
			oos.flush(); // D
			ByteArrayInputStream bin = new ByteArrayInputStream(bos.toByteArray()); // E
			ois = new ObjectInputStream(bin); // F
			// return the new object
			return ois.readObject(); // G
		} catch (Exception e) {
			System.out.println("Exception in ObjectCloner = " + e);
			throw (e);
		} finally {
			oos.close();
			ois.close();
		}
	}
}

* Reference
http://www.javaworld.com/javaworld/javatips/jw-javatip76.html?page=2

답글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다.