홈 › 중급 › 07 / 9

Object 메서드와 비교

equals, hashCode, toString, Comparable
섹션 7진행 0 / 9

7. 정리

  • == 는 같은 객체, equals 는 같은 내용. List.contains, Set, Map, remove, distinct 가 전부 equals 를 쓴다. 매개변수는 Object, 관용 구현은 this == o → instanceof 패턴 → 식별 필드 비교.
  • equals 와 hashCode 는 항상 짝. 같은 객체는 같은 해시를 내야 하고, 해시는 equals 에 쓴 필드로만 계산한다. 빠뜨리면 HashSet/HashMap 에서만 깨져 늦게 발견된다.
  • 해시 컬렉션의 키는 식별 필드를 바꾸지 않는다. 불변 id 로 식별하거나 record 로 만든다.
  • record 는 모든 필드 기준 equals/hashCode/toString 을 자동 생성한다. 값 객체·DTO 에 쓰고, 일부 필드만 식별자인 엔티티는 직접 정의한다.
  • toString 은 식별 필드만, 민감 정보는 제외.
  • Comparable 은 클래스의 자연 순서 하나, Comparator 는 필요한 만큼. 뺄셈 대신 Integer.compare, null 은 nullsLast, 조합은 comparing().thenComparing().
  • TreeSet/TreeMap 은 compareTo 로 중복을 판단하고, BigDecimal 은 equals 와 compareTo 가 다르다. 금액 비교는 compareTo() == 0.

다음 08 java.time 실무 날짜 계산 에서는 LocalDate·LocalDateTime·ZonedDateTime 이 왜 Comparable 이고 equals 가 어떻게 동작하는지에서 출발해, 정산일·영업일·월말·타임존·DB 매핑 같은 실무 날짜 문제를 다룹니다.