2008. 8. 14. 15:15

Part 5. 자바에서 자주 사용되는 클래스 I Object 클래스

자바의 모든 클래스는 java.lang.Object 클래스로부터 상속을 받도록 설계되어 있다.

▶ Object 클래스의 생성자와 메서드

생성자

public Object()

중요 메서드

protected Object clone()

객체를 복사하는데 사용합니다.

public boolean equal(Object obj)

두 객체의 내용이 동일한지 알아볼 때 사용합니다.

public int hasCode()

자바에서 객체를 식별하는 정수 값인 해시 코드를 반환합니다.

protected void finalize()

객체를 더 이상 사용하지 않을 때 쓰레기 수집기능을 수행합니다.

public Class getClass()

객체의 클래스 이름을 Class 형으로 반환합니다.

public String toString()

객체의 문자열을 반환합니다.

public void notify()

대기 중인 스레드를 하나 다시 시작합니다.

public void notifyall()

대기 중인 모든 스레드를 다시 시작합니다.

public void wait()

스레드의 작동을 중지하고 대기 상태로 만듭니다.


=========================== toSTring() 메서드 사용 예====================
package pack01;
// Object 클래스의 상속을 받기에 Object의 메소드를 가져다 사용할 수 있다.
class Point2D{ // extends Object
}
public class Ex01 {
 public static void main(String[] args) {
  Point2D pt=new Point2D();
  System.out.println(pt); // 레퍼런스변수를 출력
  // getClass().getName() + '@' + Integer.toHexString(hashCode())
  System.out.println(pt.getClass());
  System.out.println(pt.getClass().getName());
  System.out.println(pt.hashCode());
  System.out.println(Integer.toHexString(pt.hashCode()));
 }
}
== toString() 메서드와 equals() 메서드를 동시에 사용하여 비교 하는 예 ==
package pack02;
class Example{
   private String name;
   private int id;
   public Example( ){ }
   public Example(String n, int i){
     this.name=n;
     this.id=i;
   }
   public String toString(){
    String tot="이름 :" + name +","+ "id :" + id;
    return tot;
   }
   public boolean equals(Object obj){
    boolean res=false;
    if(this==obj){
     res=true;
    }
    if(obj instanceof Example){
     Example ex=(Example)obj;
     if(this.name.equals(ex.name) && this.id==ex.id)
      res=true;
    }
    return res;
   }
}
class ex05_A02 {
   public static void main(String[] args) {
  Example ex01 = new Example("전원지", 1001);
  Example ex02 = new Example("전원지", 1001);
  /*Example ex01 = new Example("전원지", 1001);
     Example ex02 = new Example("전수빈", 1002);*/
  System.out.println(ex01);
  System.out.println(ex02);
   }   
}
===================================================================================
package pack02;
class Point{
 int x=10, y=20;
 public boolean equals(Object obj){
  boolean res=false;
  if(this == obj){// 자기가 자기 자신과 비교될 수 있다
   res=true;
  }
  // 오버라이딩이란 Object의 equals랑 동일해야 하기에
  // 전달인자가 Object 형이다. Object는 Point의 필드를 사용
  // 못하기에 다운 캐스팅해야 한다.
  // 다운 캐스팅은 형검사를 2번한다.
  // 1. 컴파일시 형검사는 캐스트 연산자 이용
  // 2. 런타임시 형검사(예외가 발생) - 막기 위해서는
  if(obj instanceof Point){
  Point test=(Point)obj;
  if(this.x==test.x && this.y==test.y)
   res=true;
  }
  return res;
 }
}
public class Ex04 {
 public static void main(String[] args) {
  Point pt01=new Point();
  Point pt02=new Point();
  System.out.println(pt01==pt02);
  // Object의 equals를 상속 받아 사용하고 있음
  // Object의 equals를 상속받지 않고 Point에서 오버라이딩
  System.out.println(pt01.equals(pt02));
  // 자료구조 : 해쉬테이블(검색을 용이하게 하기 위한)
  // 객체를 구분하기 위한 용도로 해쉬코드를 사용하므로 인해서 검색이 빨라
  System.out.println(pt01.hashCode());
  System.out.println(pt02.hashCode());
 }
}
===================================================================================