equals 메서드
- 어떤 두 참조 변수의 값이 같은지 다른지 동등 여부를 비교해야 할때 사용하는 것이 equals() 메서드이다.
대표적으로 String 타입의 변수를 비교할때 가장 많이 거론되는 메서드일 것이다.- 그러면 문자열이 아닌 클래스 자료형의 객체 데이터일 경우 equals() 메소드는 어떻게 다뤄질까?
어렵게 생각할 필요 없다. 비교할 대상이 객체일 경우 객체의 주소를 이용하여 비교한다.
즉, 객체 자체를 비교할때는 == 이나 equals() 나 똑같다고 보면 된다.
equals 오버라이딩
- 만일 객체 자료형을 비교할 때, 주소 값이 아닌 객체의 필드값을 기준으로 동등 비교 기준을 변경하고 싶다면, equals 메서드를 오버라이딩해서 주소가 아닌 필드값을 비교하도록 재정의 해주면 된다.
hashCode 메서드
- hashCode 메서드는 객체의 주소 값을 이용해서 해싱(hashing) 기법을 통해 해시 코드를 만든 후 반환한다.
- 서로 다른 두 객체는 같은 해시 코드를 가질 수 없게 된다. 그래서 해시코드는 객체의 지문이라고도 한다.
- 엄밀히 말하면 해시코드는 주소값은 아니고, 주소값으로 만든 고유한 숫자값이라고 하는게 옳다.
hashCode 오버라이딩
- 만일 객체의 주소가 아닌 객체의 필드 값을 비교하기위해 equals()를 오버라이딩 한다면 hashCode도 같이 객체의 필드를 다루도록 오버라이딩 해야한다.
- 왜냐하면 equals() 의 결과가 true 인 두 객체의 해시코드는 반드시 같아야한다는 자바의 규칙 때문에 그렇다.