[java] 객체 클로닝

http://javacan.tistory.com/entry/31

Cloneable 인터페이스를 implements하고(안하면 CloneNotSupportedException 발생),
clone 메서드를 오버라이드 하고 Object의 clone(super.clone)을 실행한다.

clone 메서드가 수행되면 원본과 같은 객체를 새로 생성하고, 모든 필드들을 원본의 필드들과 같은 값으로 초기화한다.
(생성자는 실행되지 않음)
단순하게 대입에 의해 복사되는 형태이기 때문에, 배열이나 객체의 경우 참조값만 복사되게 된다.
즉, 원본 객체에 대해 deep clone 하지 않고 shallow clone 한다는 뜻이다.

따라서 객체가 가지고 있는 배열이나 객체에 Cloneable 인터페이스를 구현하고 clone을 오버라이딩 해줘야하고,
(배열은 기본적으로 clone이 구현되어 있음)
클로닝의 대상이 되는 객체에서 해당 필드까지 전부 클로닝을 실행해줘야 한다.
클로닝 대상의 범위는 개발자가 필요로 하는 곳 까지 구현하면 된다.