[공부노트] 객체 비교 - equals() and hashcode()

DreamJJW·2023년 12월 12일
0

공부 노트

목록 보기
13/18

객체 비교 -> Object끼리의 비교.

동등성 : 객체가 주소값이 다르더라도 내용(필드값)이 같다면 같다고 보는 것.
동일성 : 객체의 상태가 완전히 같아도, 주소값이 다르면 다른 객체이다.

엔티티를 영속화하는 과정에서
엔티티매니저에서 불러오는 두 객체는 서로 다를 수 있다.

따라서 equals뿐만 아닌 hashcode()까지 써야하는 것이다.

엔티티는 그 본질이 자바 객체라기보단 데이터베이스 테이블의 레코드에 가깝기 때문에 엔티티 객체의 필드가 동일하다면 같은 레코드, 즉 객체라고 판단해야 하는 것이다. 이 경우 Object의 equals 메서드로는 해결할 수 없기 때문에 equals 메서드 그리고 관례에 따라 hashCode 메서드를 재정의해야 한다.


// 영속성 컨텍스트에서 따른 동등성 검사
// 만약 id가 준영속 상태 (id == null)이라면 동등성 검사에서 탈락한다.
@Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof Post post)) return false;
        return id != null && id.equals(post.id);
    }

    @Override
    public int hashCode() {
        return Objects.hash(id);
    }
profile
간절한 사람

0개의 댓글