[JAVA강좌,자바객체]자바객체복제 및 해시코드 예제(Cloneable Marker Interface, HashCode)
오늘은 객체복제 및 해시코드에 대해 알아봅니다.
Cloneable 인터페이스를 마커인터페이스라한다. 아무런 구현할 메소드 선언하지 않고 어떤 일반적특성을가진 클래스임을 선언 하는데
사용(객체복제가 가능한 클래스임을 지정함)
아래예제에서 해시코드를 출력했는데 객체참조변수가 참조하는 힙영역의 객체가 같은 것이면 같은 해시코드 값을 가진다.
package onj;
//아래 Cloneable 인터페이스는 Marker 인터페이스, 객체복제가 가능하도록 한다.
class Person extends Object implements Cloneable {
String name;
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
class Person extends Object implements Cloneable {
String name;
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
public class CloneTest {
public static void main(String[] args) throws CloneNotSupportedException {
Person p = new Person();
p.name = "홍길동";
//Person이 Cloneable 인터페이스를 구현했으므로 복제가능
//Object형이 리턴되므로 Person으로 캐스팅해야 한다.
Person p2 = (Person) p.clone();
p2.name = "김길동";
//p2가 참조하는 객체를 p3도 참조
//힙영역의 같은 객체를 참조하므로 해시코드값도 같다.
Person p3 = p2;
System.out.println("p.name" + p.name);
System.out.println("p2.name" + p2.name);
System.out.println("p hashcode " + p.hashCode());
//아래 두 객체참조변수의 해시코드값은 같다.
System.out.println("p2 hashcode " + p2.hashCode());
System.out.println("p2 hashcode " + p3.hashCode());
}
}
public static void main(String[] args) throws CloneNotSupportedException {
Person p = new Person();
p.name = "홍길동";
//Person이 Cloneable 인터페이스를 구현했으므로 복제가능
//Object형이 리턴되므로 Person으로 캐스팅해야 한다.
Person p2 = (Person) p.clone();
p2.name = "김길동";
//p2가 참조하는 객체를 p3도 참조
//힙영역의 같은 객체를 참조하므로 해시코드값도 같다.
Person p3 = p2;
System.out.println("p.name" + p.name);
System.out.println("p2.name" + p2.name);
System.out.println("p hashcode " + p.hashCode());
//아래 두 객체참조변수의 해시코드값은 같다.
System.out.println("p2 hashcode " + p2.hashCode());
System.out.println("p2 hashcode " + p3.hashCode());
}
}
댓글 없음:
댓글 쓰기