JAVA/JPA

(JPA) 값 타입의 비교

ri5 2021. 7. 6. 19:48

값 타입


• 값 타입: 인스턴스가 달라도 그 안에 값이 같으면 같은 것으로 봐 야 함

• 예)

int a = 10; 
int b = 10;

Address a = new Address(“서울시”) 
Address b = new Address(“서울시”)

값 타입의 비교

• 동일성(identity) 비교: 인스턴스의 참조 값을 비교, == 사용

• 동등성(equivalence) 비교: 인스턴스의 값을 비교, equals() 사용

• 값 타입은 a.equals(b)를 사용해서 동등성 비교를 해야 함

• 값 타입의 equals() 메소드를 적절하게 재정의(주로 모든 필드 사용)

 

- 재정의 

@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);
}

- 비교

Address address = new Address("city","street","10000");
Address address2 = new Address("city","street","10000");


// test for equality
System.out.println("address == address2: " + (address.equals(address2)));