[JAVA] Clone()메서드

GyeongEun Kim·2021년 6월 29일
0
post-custom-banner

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
*/

위 출력결과처럼 기존 인스턴스와 내용은 완전히 동일하지만, 다른 메모리공간에 새로운 인스턴스가 생성되는 것을 알 수 있다.

profile
내가 보려고 쓰는 글
post-custom-banner

0개의 댓글