울음참고 개발공부
728x90

 

 

두 객체가 동일한 hashCode 를 가질때

Equals() 값은  true 다 ?

 

 

 

 

결론은 그렇다 ! 

 

 

 

 

 

반대의 경우?

그러나 두 객체의 hashCode가 다르더라도 equals 메서드가 항상 false를 반환해야 하는 것은 아닙니다.
hashCode 함수는 객체가 서로 다른 경우에는 다른 hashCode 값을 반환해야 하지만, 같은 hashCode 값을 반환하는 경우에는 두 객체가 같지 않을 수도 있습니다.

equals 메서드는 이러한 경우에 추가적인 비교 로직을 통해 객체의 내용을 비교하여 true 또는 false를 반환합니다.

 

 


 

 

hashCode

 

  • 객체의 해시 코드를 반환하는 메서드
    • 해시 코드는 일반적으로 객체의 고유한 정수값이며, 해시 함수에 의해 계산된다.
  • Java 에서 hashCode 메서드는 Object 클래스에서 상속되어 기본 구현이 제공되지만, 필요에 따라 오버라이딩하여 사용할 수 있다.

 

 

equals 메서드

 

 

  • 두 객체의 동등성을 비교하는 메서드
  • 객체 내용을 기반으로 비교를 수행하며, 객체가 동은한지 여부를 논리적으로 결정
  • hashCode와 함께 사용될 때 일관성 있는 결과를 보장함

 

public class Person {
    private String name;
    private int age;
  
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
  
    // equals 메서드 오버라이딩
    @Override
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }
        if (obj == null || getClass() != obj.getClass()) {
            return false;
        }
        Person person = (Person) obj;
        return age == person.age && Objects.equals(name, person.name);
    }
  
    // hashCode 메서드 오버라이딩
    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }
}

 

 


 

hashCode 와  equals 메서드를 활용

 

HashMap 

 

: key-value 로 데이터를 저장하고 검색하는데 사용되는 자료구조

 

import java.util.HashMap;
import java.util.Map;

public class HashMapExample {
    public static void main(String[] args) {
        Person person1 = new Person("John", 25);
        Person person2 = new Person("John", 25);

        Map<Person, String> personMap = new HashMap<>();
        personMap.put(person1, "Value 1");
        personMap.put(person2, "Value 2");

        System.out.println(personMap.size()); // 1
        System.out.println(personMap.get(person1)); // Value 2
        System.out.println(personMap.get(person2)); // Value 2
    }
}

 

 

풀이
Person 객체를 키로 사용하는 해시 맵을 생성하고, person1과 person2 객체를 동일한 키로 저장합니다.
이때, Person 클래스에서 오버라이딩한 equals 메서드를 사용하여 동등성을 비교하고, hashCode 메서드를 사용하여 해시 코드를 계산합니다.

해시 맵에 person1을 추가한 후 person2를 추가하면 동일한 키로 간주되어 중복 저장되지 않습니다.
따라서 해시 맵의 크기는 1이 됩니다.
또한, person1과 person2를 키로 사용하여 값을 조회할 때 동일한 값을 반환합니다.

이 예시에서는 hashCode와 equals 메서드를 사용하여 동등성 비교를 수행하고, 해시 맵에서 객체를 검색하고 저장하는 데 활용되는 것을 볼 수 있습니다.

 

728x90

'1. basic' 카테고리의 다른 글

Java 에서 String은 기본 데이터 타입 ?  (0) 2023.07.05
Java 에서 Math.round(-1.5)의 의미  (0) 2023.07.05
Java 에서 final 의 기능  (0) 2023.07.05
== 와 equals 의 차이점  (0) 2023.06.28
JDK 와 JRE 의 차이점  (0) 2023.06.27
profile

울음참고 개발공부

@메각이

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!