clone()
은 말 그대로 객체를 복사하는 메서드이다. 또 다른 메모리 공간에 객체가 복사되어 생성되는 것이다.
clone()
을 사용하려면 클래스에 Cloneable
인터페이스를 구현해야 한다. 그러나 Cloneable
인터페이스에서 별도로 구현해야하는 메서드는 없다. 이렇게 구현할 메서드가 없는 인터페이스를 마커 인터페이스(marker interface)라고 한다.
class Point {
int x,y;
Point (int x, int y) {
this.x=x;
this.y=y;
}
public String toString() {
return "x= "+x+","+" y= "+y;
}
}
class Circle implements Cloneable {
Point point;
int radius;
Circle (int x, int y, int radius) {
this.radius=radius;
point = new Point(x,y);
}
public String toString () {
return "원점은 "+ point +"이고, 반지름은 "+ radius +"입니다";
}
@Override
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
public class ObjectCloneTest {
public static void main(String[] args) throws CloneNotSupportedException {
Circle circle = new Circle(10,20,30);
Circle copyCircle =(Circle)circle.clone();
System.out.println(circle);
System.out.println(copyCircle);
System.out.prinltn(System.identityHashCode(circle));
System.out.println(System.identityHashCode(copyCircle));
}
}
/*출력결과
원점은 x=10, y=20이고, 반지름은 30입니다
원점은 x=10, y=20이고, 반지름은 30입니다
2085857771
248609774
*/
위 출력결과처럼 기존 인스턴스와 내용은 완전히 동일하지만, 다른 메모리공간에 새로운 인스턴스가 생성되는 것을 알 수 있다.