오봉이와 함께하는 개발 블로그

JPA - 값 타입의 비교 본문

BE/JPA

JPA - 값 타입의 비교

오봉봉이 2022. 6. 29. 02:05
728x90

값 타입의 비교

값 타입은 인스턴스가 달라도 그 안에 값이 같으면 같은 것으로 봐야 한다.

int a = 10;
int b = 10;
// a == b -> true 값이 들어있기 때문에 참

Address a = new Address("city");
Address b = new Address("city");
// a == b -> false 참조가 들어있기 때문에 거짓
  • 동일성(identity) 비교
    • 인스턴스의 참조 값을 비교, == 사용
  • 동등성(equivalence) 비교
    • 인스턴스의 값을 비교, equals() 사용

값 타입은 a.equals(b)를 사용해서 동등성 비교를 해야 한다.
하지만 equals()메소드의 기본은 ==을 사용하기 때문에 Override를 해야 한다.

// command + n + eq.. 검색 기본 값으로 사용
@Override
public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;
    Address address = (Address) o;
    return Objects.equals(city, address.city) &&
            Objects.equals(street, address.street) &&
            Objects.equals(zipcode, address.zipcode);
}
@Override
public int hashCode() {
    return Objects.hash(city, street, zipcode);
}

사실상 비교할 일이 크게 많지는 않지만 실제 값을 비교해야 할 요구사항이 생긴다면 필드를 하나씩 꺼내서 사용하는 것 보단, equals()를 만들어서 사용하는 것이 좋다.

출처 : 인프런 김영한 지식공유자님의 스프링 부트와 JPA 실무 완전 정복 로드맵 강의
728x90

'BE > JPA' 카테고리의 다른 글

JPA - 실전 예제 6 - 값 타입 매핑  (0) 2022.06.29
JPA - 값 타입 컬렉션  (0) 2022.06.29
JPA - 값 타입과 불변 객체  (0) 2022.06.29
JPA - 임베디드 타입  (0) 2022.06.29
JPA - 기본값 타입  (0) 2022.06.29
Comments