해당 글은 김영한 님의 자바 ORM 표준 JPA 프로그래밍을 참고하여 작성한 글입니다.
✅ 값 타입의 비교
자바가 제공하는 객체 비교는 동일성 비교, 동등성 비교 2가지가 있다.
1️⃣ 동일성(identity) 비교
인스턴스의 참조 값을 비교한다. == 사용해서 비교하는 방법이다.
2️⃣ 동등성(equivalence) 비교
인스턴스의 값을 비교한다. equals() 사용해서 비교하는 방법이다.
▶ 값 타입의 동등성, 동일성
Address a = new Address("서울시", "종로구", "1번지");
Address b = new Address("서울시", "종로구", "1번지");
- Address 값 타입을 a == b로 동일성 비교하면 둘은 서로 다른 인스턴스이므로 결과는 거짓이다.
- 하지만 이것은 기대하는 결과가 아니다. 값 타입은 비록 인스턴스가 달라도 그 안에 값이 같으면 같은 것으로 봐야 한다.
- 따라서 값 타입을 비교할 때는 a.equals(b)를 사용해서 동등성 비교를 해야 한다. (물론 Address의 equals() 메서드를 재정의해야 한다.)
참고: 자바에서 equals()를 재정의하려면 hashCode()도 재정의하는 것이 안전하다. 그렇지 않으면 해시를 사용하는 컬렉션(HashSet, HashMap)이 정상 동작하지 않는다.
📍 참고
'Programming > JPA' 카테고리의 다른 글
[JPA] JPQL 기본 문법 - 객체지향 쿼리 언어 JPQL (1) (0) | 2024.08.07 |
---|---|
[JPA] 값 타입 컬렉션 - 값 타입 (4) (3) | 2024.07.25 |
[JPA] 값 타입과 불변 객체 - 값 타입 (2) (0) | 2024.07.25 |
[JPA] 기본값 타입과 임베디드 타입 - 값 타입 (1) (1) | 2024.07.25 |
[JPA] 영속성 전이(CASCADE)와 고아 객체 (1) | 2024.07.25 |