equals만 오버라이드하고 hashCode를 빠뜨리면 HashSet에서 방금 넣은 값을 못 찾습니다. 왜 그런지 풀고, 값 객체와 엔티티를 무엇으로 가르는지, 각각을 어떻게 짜야 하는지, @Data를 엔티티에 붙이면 왜 위험한지까지 이어집니다.
생성자에서 검증에 실패해 예외를 던져 막았다고 생각한 객체를, finalize를 재정의한 하위 클래스가 살려냅니다. 어떻게 뚫리는지 돌아가는 코드로 보여주고, final과 super 앞 검증을 포함한 막는 방법 다섯 가지를 한계까지 비교합니다.