๊ฐ์ฒด์ ์ ์ฅ๋ ๊ฐ์ ๋ณต์
๊ฐ์ฒด๊ฐ ์ฐธ์กฐํ๋ ์ฃผ์๋ฅผ ๋ณต์
public class Circle implements Cloneable{
private Point point;
private double radius;
public Circle(Point point, double radius) {
this.point = point;
this.radius = radius;
}
public Point getPoint() {
return point;
}
public double getRadius() {
return radius;
}
public void setPoint(Point point) {
this.point = point;
}
public void setRadius(double radius) {
this.radius = radius;
}
@Override
public Circle clone() {
try {
return (Circle) super.clone();
} catch (CloneNotSupportedException e) {
throw new AssertionError();
}
}
public Circle shallowCopy() {
return clone();
}
public Circle deepCopy() {
return new Circle(new Point(point.getX(), point.getY()), radius);
}
}
public class Point{
private int x;
private int y;
public int getX() {
return x;
}
public int getY() {
return y;
}
public void setX(int x) {
this.x = x;
}
public void setY(int y) {
this.y = y;
}
public Point(int x, int y) {
this.x = x;
this.y = y;
}
}
false
์
๋๋ค.public class ShallowCopy {
public static void main(String[] args) {
Circle circle = new Circle(new Point(1, 1), 2.0);
Circle copy = circle.shallowCopy();
System.out.println(circle == copy);
}
}
public class DeepCopy {
public static void main(String[] args) {
Circle circle = new Circle(new Point(1, 1), 2.0);
Circle copy = circle.deepCopy();
System.out.println(circle == copy);
}
}
new Point(2, 2)
๋ก ์ ์ฐธ์กฐ๊ฐ์ ๋ฃ์ด์ฃผ๋ฉด ์์๋ณต์ฌ๋ฅผ ๋ณผ ์ ์์ต๋๋ค.public class ShallowCopy {
public static void main(String[] args) {
Circle circle = new Circle(new Point(1, 1), 2.0);
Circle copy = circle.shallowCopy();
circle.setRadius(3.0);
circle.setPoint(new Point(2, 2));
System.out.println(circle.getRadius());
System.out.println(circle.getPoint().getX()+", "+circle.getPoint().getY());
System.out.println(copy.getRadius());
System.out.println(copy.getPoint().getX()+", "+copy.getPoint().getY());
}
}
public class DeepCopy {
public static void main(String[] args) {
Circle circle = new Circle(new Point(1, 1), 2.0);
Circle copy = circle.deepCopy();
circle.setRadius(3.0);
circle.setPoint(new Point(2, 2));
System.out.println(circle.getRadius());
System.out.println(circle.getPoint().getX()+", "+circle.getPoint().getY());
System.out.println(copy.getRadius());
System.out.println(copy.getPoint().getX()+", "+copy.getPoint().getY());
}
}
public class ShallowCopy {
public static void main(String[] args) {
Circle circle = new Circle(new Point(1, 1), 2.0);
Circle copy = circle.shallowCopy();
circle.setRadius(3.0);
circle.getPoint().setX(2);
circle.getPoint().setY(2);
System.out.println(circle.getRadius());
System.out.println(circle.getPoint().getX()+", "+circle.getPoint().getY());
System.out.println(copy.getRadius());
System.out.println(copy.getPoint().getX()+", "+copy.getPoint().getY());
}
}
-----
3.0
2, 2
2.0
2, 2
-----
public class DeepCopy {
public static void main(String[] args) {
Circle circle = new Circle(new Point(1, 1), 2.0);
Circle copy = circle.deepCopy();
circle.setRadius(3.0);
circle.getPoint().setX(2);
circle.getPoint().setY(2);
System.out.println(circle.getRadius());
System.out.println(circle.getPoint().getX()+", "+circle.getPoint().getY());
System.out.println(copy.getRadius());
System.out.println(copy.getPoint().getX()+", "+copy.getPoint().getY());
}
}
-----
3.0
2, 2
2.0
1, 1
-----