값 타입: 인스턴스가 달라도 그 안에 값이 같으면 같은 것으로 봐야한다.
int a = 10;
int b = 10;
a == b // true
Address a = new Address(“서울시”)
Address b = new Address(“서울시”)
a == b // false
- 동일성(identity) 비교: 인스턴스의 참조 값을 비교, == 사용
- 동등성(equivalence) 비교: 인스턴스의 값을 비교, equals() 사용
- 값 타입은 a.equals(b)를 사용해서 동등성 비교를 해야 한다.
- 값 타입의 equals() 메소드를 적절하게 재정의해주어야 한다. (주로 모든 필드 사용)
equals 메서드를 오버라이드 하지 않았을 경우
Address address1 = new Address("city", "street", 1000);
Address address2 = new Address("city", "street", 1000);
System.out.println(address1==address2) // false
System.out.println(address1.equals(address2)) // false
equals() 메소드를 적절하게 재정의 해줬을 경우
Address address1 = new Address("city", "street", 1000);
Address address2 = new Address("city", "street", 1000);
System.out.println(address1==address2) // false
System.out.println(address1.equals(address2)) // true
참고1 : euqals같은 메서드는 자동완성 기능을 사용하는게 바람직하다.
참고2 : 현업에서 값 타입을 비교할 일이 거의 없지만 equals 메서드를 오버라이드 하여 명확하게 해주는게 바람직하다.
※참고 : 인프런 김영한 JPA
'JPA' 카테고리의 다른 글
JPA - 값 타입과 불변 객체 (0) | 2022.04.12 |
---|---|
JPA - 기본값 타입과 임베디드 타입 (0) | 2022.04.12 |
JPA - 영속성 전이(CASCADE)와 고아 객체 (2) | 2022.04.11 |
JPA - 즉시 로딩과 지연 로딩 (0) | 2022.04.11 |
JPA - 프록시 (0) | 2022.04.11 |
댓글