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 매핑 같은 실무 날짜 문제를 다룹니다.