시냅스

[JAVA] Equals와 hashcode 본문

Java, Spring

[JAVA] Equals와 hashcode

ted k 2022. 7. 11. 22:49

equals, hashcode

Object 의 메소드인 equals와 hashcode에 대해 알아보자.

 

euqals 함수는 객체의 값이 같은지에 대한 여부를 boolean 값으로 반환하는 함수이다.

hashcode 함수는 객체의 주소값을 해시코드로 반환하는 함수이다.

 

equals 함수는 객체에 대한 주소 값으로 같은지 여부를 판단하고,

hashcode 함수는 객체의 주소값을 해시테이블로 갖고 있기 때문에

객체의 값이 아닌 다른 기준으로 분류하고 싶다면 클래스 내부에서 오버라이딩 해줘야 한다.

 

구현 예시

class Car {
    private String model;
    private String color;

    public Car(String model, String color) {
        this.model = model;
        this.color = color;
    }

    @Override
    public String toString() {
        return model + " : " + color;
    }
    @Override
    public int hashCode() {
        // return Objects.hash(model, color); 이렇게 주면 자바가 의도한 성능의 해쉬값 줌
        return (model.hashCode() + color.hashCode()) / 2;
    }
    @Override
    public boolean equals(Object obj) {
        String m = ((Car) obj).model;
        String c = ((Car) obj).color;

        if (model.equals(m) && color.equals(c))
            return true;
        else
            return false;
    }

}

public class HowHashCode {
    public static void main(String[] args) {
        HashSet<Car> set = new HashSet<>();
        set.add(new Car("HY_MD_301", "RED"));
        set.add(new Car("HY_MD_301", "BLACK"));
        set.add(new Car("HY_MD_302", "RED"));
        set.add(new Car("HY_MD_302", "WHITE"));
        set.add(new Car("HY_MD_301", "RED"));
        System.out.println("인스턴스 수 : " + set.size());

        for(Car car : set)
            System.out.println(car);
    }
}

 

위에서는 모델명과 색이 같으면 같은 객체로 분류하였다.

 

따라서 출력은

인스턴스 수 : 4
HY_MD_301 : RED
HY_MD_302 : RED
HY_MD_301 : BLACK
HY_MD_302 : WHITE

으로 확인할 수 있다.

Comments