Java

86. Object클래스와 equals() - 패스트캠퍼스 백엔드 부트캠프 3기

gkss2tpt 2024. 12. 26. 17:18

1. Object클래스

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

 

2. equals(Object obj)

  • 객체 자신(this)과 주어진 객체(obj)를 비교한다. 같으면 true, 다르면 false
  • Object클래스의 equals()는 객체의 주소를 비교(참조변수 값 비교)
public class Ex02 {
    static class Value {
        int value;	//this.value

        Value(int value) {
            this.value = value;
        }

        public boolean equals(Object obj) {

            if(obj instanceof Value) return false;

            Value v = (Value)obj;

            return this.value == v.value;
        }
    }
    public static void main(String[] args) {
        Value v1 = new Value(10);
        Value v2 = new Value(10);

        if (v1.equals(v2)) {
            System.out.println("같다");
        } else {
            System.out.println("다르다");
        }
    }
}

 

3. equals(Object obj)의 오버라이딩

  • 인스턴스 변수(iv)의 값을 비교하도록 equals()를 오버라이딩해야 한다.
class Person {
    long id;
    
    public boolean equals(Object obj) {
        if(obj instanceof Person)
        	return id ==((Person)obj).id;
        else
            return false;
    }
    
    Person(long id) {
        this.id = id;
    }
}