BE전문가 프로젝트

값 타입의 비교 본문

JPA

값 타입의 비교

원호보고서 2022. 11. 2. 21:40

값 타입

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

값 타입의 비교

  • 동일성(identity) 비교: 인스턴스의 참조 값을 비교, == 사용
  • 동등성(equivalence) 비교: 인스턴스의 값을 비교, equals()사용
  • 값 타입은 a.equals(b)를 사용해서 동등성 비교를 해야함
  • 값 타입의 equals() 메소드를 적절하게 재정의(주로 모든 필드 사용)
@Embeddable
@NoArgsConstructor
public class Address {
    private String city;
    private String street;
    private String zipcode;

    public Address(String city, String street, String zipcode) {
        this.city = city;
        this.street = street;
        this.zipcode = zipcode;
    }

    public String getCity() {
        return city;
    }

    public String getStreet() {
        return street;
    }

    public String getZipcode() {
        return zipcode;
    }

    @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' 카테고리의 다른 글

객체지향 쿼리 언어  (0) 2022.11.06
값 타입 컬렉션  (0) 2022.11.02
값 타입과 불변 객체  (0) 2022.11.02
임베디드 타입(복합 값 타입)  (0) 2022.11.01
기본값 타입  (0) 2022.11.01
Comments