equals() 메소드

equals() : obj가 가리키는 객체와 현재 객체를 비교하여 같으면 true를 리턴
hashCode() 메소드

객체에 대한 메모리 주소를 int타입으로 리턴
- 만약 어떤 두 개의 객체가 서로 동일하다면 hashCode()는 무조건 동일
- equals() 메소드를 override하면 hashCode() 메소드도 override해서 동일한 결과가 나와야 한다.
- native 언어로 작성된 메소드
데이터 저장 위치를 결정하는데 사용됨
equals와 hashCode의 관계

특징
동일한 객체는 동일한 메모리 주소를 갖는다 고로 동일한 객체는 동일한 해시코드를 갖는다.
그렇기 때문에 equals메소드를 오버라이드 할려면 hashCode()도 오버라이드 해야한다.
- equals()를 override할 때 hashCode()도 재정의해야 한다.
- equals()의 값이 true이면, hashCode()도 동일한 값을 가져야 함
- equals()의 값이 false면 hashCode()는 각각의 객체는 고유값을 갖는다.
- equals()의 값이 false이라도 hashCode()의 값이 무조건 달라야 할 필요는 없다.
- 다만 서로 다른 int값을 제공하면 hashtable의 성능을 향상시키는데 도움이 된다.