오봉이와 함께하는 개발 블로그
JPA - 값 타입의 비교 본문
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