Programming/자바(Java)

9-1 Object 클래스

먹보 개발자 2024. 10. 7. 19:49

- 모든 클래스의 최고 조상. 오직 11개의 메서드만을 가지고 있다.

- notify(), wait() 등은 쓰레드와 관련된 메서드이다. 

 

equals (Object obj)

-객체 자신(this)과 주어진 객체(obj)를 비교한다. 같으면 true, 다르면 false.

-Object클래스의 equals()는 객체의 주소를 비교(참조변수 값 비교)

-인스턴스 변수(iv)의 값을 비교하도록 equals()를 오버라이딩 해야한다.

instanceof를 쓰지 않았을 때 뜨는 경고문

 

hashCode()

- 객체의 해시코드(hash code)를 반환하는 메서드

- Object클래스의 hashCode()는 객체의 주소를 int로 변환해서 반환

- equals()를 오버라이딩 하면, hashCode()도 오버라이딩해야 한다.

자바의 Object 클래스에서는 **equals()**와 hashCode() 메서드가 서로 연관된 규약을 따른다.

  • equals()를 오버라이딩하면, hashCode()도 반드시 오버라이딩해야 한다
  • 동일한 객체라면 동일한 해시 코드를 반환해야 하므로, 이를 일관되게 유지해야 한다
  • equals()와 hashCode()의 규약을 따르지 않으면, **해시 기반 컬렉션(HashMap, HashSet 등)**에서 예상치 못한 동작이 발생할 수 있다.
  • 항상 equals()와 hashCode()를 함께 오버라이딩하여, 객체가 정확하게 비교되고, 해시 기반 자료 구조에서 올바르게 동작하도록 보장해야 한다

 

- equals()의 결과가 true인 두 객체의 해시코드는 같아야 하기 때문 ★★★

 

 *native 메서드: 자바 코드로 작성되지 않은 메서드,  자바 외부의 다른 언어(C, C++ 같은 네이티브 언어)로 구현된 메서드

  JNI(Java Native Interface): 네이티브 언어로 작성된 코드를 호출할 수 있게 해주는 기술

 

equals()를 오버라이딩 하면, hasCode()도 오버라이딩 해야한다.

-System.identityHashCode(Object obj) > Object 클래스의 hashCode()와 동일, 하지만 객체마다 다른 해시코드 반환

toString(), toString()의 오버라이딩

-toString(): 객체를 문자열(String)으로 변환하기 위한 메서드

public String toString() { // Object클래스의 toString()
        return getClass().getName()+"@"+Integer.toHexString(hashCode());
}