IT_Programming/Java

클론을 이용한 참조 타입의 복사본 만들기

JJun ™ 2007. 6. 29. 19:29

/*
    클론을 이용한 참조 타입의 복사본 만들기

 

    - Object의 clone()을 오버라이딩한다.
       javap java.lang.Object는 protected native java.lang.Object clone() throws

       java.lang.CloneNotSupportedException;을 보여준다. 참고로 clone()의 리턴 타입은 Object이다.
*/

class Student implements Cloneable
{
 private String name;
 private int id;
 private String addr;

 public Student(String name, int id, String addr)
 {
  this.name = name;
  this.id = id;
  this.addr = addr;
 } // Student

 public String getAddr()
 {
  return addr;
 }

 public int getId()
 {
   return id;
 }

 public String getName()
 {
   return name;
 }

 public void setAddr(String string)
 {
   addr = string;
 }

 public void setId(int i)
 {
   id = i;
 }

 public void setName(String string)
 {
   name = string;
 }

 public String toString()
 {
   return name+" "+id+" "+addr;
 } // toString

 public Object clone()
 {
  try
  {return super.clone();}
  catch(CloneNotSupportedException cnse)
  { return this;}

 } //clone
}

public class CloneMain
{
 public static void main(String[] args)
 {
  Student st = new Student("KHJ",6,"부산광역시 해운대구");
  System.out.println("1"+st);

  Student st1 = st;   // reference assignment copy

  st1.setAddr("서울 특별시");
  st1.setId(3);

  System.out.println("2"+st);
  Student sts = (Student) st.clone(); // 얕은 복사

  System.out.println("3"+sts);
  sts.setAddr("대구 광역시");
  sts.setId(5);

  System.out.println("4"+st);
  System.out.println("5"+sts);
 }
}