Object 클래스와 equals()

이의준·2024년 6월 4일

Java

목록 보기
49/87

Object 클래스

  • 모든 클래스의 최고 조상. 오직 11개의 메서드만을 가지고 있음
  • notify(), wait() 등은 쓰레드와 관련된 메서드임
메서드설명
protected Object clone()객체 자신의 복사본을 반환한다.
public boolean equals(Object obj)객체 자신과 객체 obj가 같은 객체인지 알려준다. (같으면 true)
protected void finalize()객체가 소멸될 때 가비지 컬렉터에 의해 자동적으로 호출된다. 이 메서드를 수행해야 하는 코드가 있을 때 오버라이딩한다. (거의 사용안함)
public Class getClass()객체 자신의 클래스 정보를 담고 있는 Class 인스턴스를 반환한다.
public int hashCode()객체 자신의 해시코드를 반환한다.
public String toString()객체 자신의 정보를 문자열로 반환한다.
public void notify()객체 자신을 사용하려고 기다리는 쓰레드를 하나만 깨운다.
public void notifyAll()객체 자신을 사용하려고 기다리는 모든 쓰레드를 깨운다.
public void wait()다른 쓰레드가 notify()나 notifyAll()을 호출할 때까지 현재 쓰레드를 무한정 또는 지정된 시간(timeout, nanos) 동안 기다리게 한다. (timeout은 천 분의 1초, nanos는 10⁹분의 1초)
public void wait(long timeout)다른 쓰레드가 notify()나 notifyAll()을 호출할 때까지 현재 쓰레드를 지정된 시간(timeout) 동안 기다리게 한다. (timeout은 천 분의 1초)
public void wait(long timeout, int nanos)다른 쓰레드가 notify()나 notifyAll()을 호출할 때까지 현재 쓰레드를 지정된 시간(timeout, nanos) 동안 기다리게 한다. (timeout은 천 분의 1초, nanos는 10⁹분의 1초)

equals(Object obj)

  • 객체 자신(this)과 주어진 객체(obj)를 비교
  • 같으면 true 다르면 false
  • Object 클래스의 equals()는 객체의 주소를 비교(참조변수 값 비교)
public boolean equals(Object obj) {
	return (this==obj);
}
Value v1 = new Value(10);
Value v2 = new Value(10);
System.out.println(v1.equals(v2));
  • 서로 다른 객체는 주소가 다르기 때문에 false

equals()를 주소가 아닌 값비교를 하도록 오버라이딩

class Value {
	int value;
    
    Value(int value) {
    	this.value = value;
    }
    
    public boolean equals(Object obj) {
    	// return this==obj 이것은 기존과 같은 주소 비교
        // 참조변수의 형변환 전에는 반드시 instanceof로 확인
        if(!(obj instanceof Value)) return false;
        
        Value v = (Value)obj;
        
        return this.value == v.value;
 }
  • 위와 같이 obj를 Value형으로 형변환 시킨 후 value끼리 값 비교를 하도록 오버라이딩 가능
  • 형 변환 전에는 instaceof로 확인 (위 경우 애초에 obj가 Value형이 아니면 비교할 필요 조차 없어짐)

0개의 댓글