equals(2)
-
[Effective Java] item 10. equals는 일반 규칙을 지켜 재정의하라
Java를 사용할 때면 객체를 비교하기 위해 equals를 재정의하는 경우가 종종 있다. equals 메서드는 재정의하기 쉬워 보이지만 잘못하면 끔찍한 결과를 초래한다. 이 문제를 회피하기 가장 쉬운 방법은 아예 재정의하지 않는 것이다. 그냥 두면 그 클래스의 인스턴스는 오직 자기 자신과만 같게 된다. Object.equals를 그대로 상속받기 때문이다. 그러니 다음에서 열거한 상황 중 하나에 해당한다면 재정의하지 않는 것이 최선이다. equals를 재정의할 필요가 없는 경우 각 인스턴스가 본질적으로 고유하다. 값을 표현하는 게 아니라 개체를 표현하는 클래스가 여기에 해당된다. Thread가 좋은 예로, Object의 equals는 이러한 클래스에 딱 맞게 구현되었다. 값 클래스라 하더라도, 값이 같은 ..
2023.04.15 -
[Java] Equals and HashCode
equals()와 hashcode()는 서로 다른 객체가 같은지를 판별할 때 사용되는 메서드이다. Object 클래스에 구현되어 있고 따라서 모든 객체가 상속받는다. Object의 equals()는 객체의 참조값을 비교하기 때문에 비교하고자 하는 클래스에서 hashCode()와 함께 오버라이딩해야 한다. hashCode()는 객체의 멤버 변수를 통해 해싱을 통한 해시값을 만들어낸다. 따라서 멤버 변수가 달라지면 hashCode()의 결과도 달라진다. 참고로 Object의 hashCode()는 객체의 주소값으로 해시코드를 만들어내기 때문에 프로그램을 실행할 때마다 변경될 수 있다. JDK1.8부터 java.util.Objects 클래스에 hash() 메서드가 추가됐다. hashCode()를 구현할 때 유용..
2021.10.19