자바에서 특정 클래스를 deep copy하려면 Object#clone() 메소드를 이용한다. 


    protected native Object clone() throws CloneNotSupportedException;



public class GcmMessage {


public Object clone() throws CloneNotSupportedException {

return (GcmMessage) super.clone();

}

}


//코드

GcmMessage gcmMessage = new GcmMessage();

GcmMessage newGcmMessage = (GcmMessage ) gcmMessage.clone();



List, Map과 같은 일부 Collection은 interface이라서 clone() 메소드를 지원하지 않는다. 



이럴 때는 ArrayList 또는 HashMap같은 실제 클래스(concrete class)를 사용해야 하지만...

Guava의 Lists또는 Maps(com.google.common.collect.Maps)의 static 생성 메소드를 사용하는 것이 훨씬 편하다.

Maps.newHashMap() 또는 Lists.newArrayList()와 같은 메소드를 사용하는 것이 deep copy에 훨씬 편하다.



Map<String, Object> newMap = Maps.newHashMap(map);









Posted by '김용환'
,