개발자 Q&A

개발하다 막혔다면? 여기서 질문하세요! 초보부터 고수까지, 함께 고민하고 해결하는 공간입니다. 누구나 자유롭게 질문하고 답변을 남겨보세요!

2025.08.10 14:25

DsHashable::equals 관련 질문

목록
  • Firebase러버 10시간 전 2025.08.10 14:25 새글
  • 1
    1
DsHashable::equals 메서드는 두 개의 객체를 비교할 때 사용되는데요.
두 객체가 같은 클래스의 인스턴스인지 확인하고 싶습니다.
만약 두 객체가 같은 클래스의 인스턴스라면,
그 다음에 각 필드의 값을 비교해줘야 하는데요.
여기서 문제가 생기는 부분은,
객체가 HashMap이나 HashSet과 같은 컬렉션에 저장되면,
객체의 해시코드가 같아야지 컬렉션에 저장이 가능하다는 점입니다.
DsHashable::equals 메서드를 오버라이드할 때,
필드의 값을 비교할 때 어떤 순서로 비교해야 하는지 알려주세요.

    댓글목록

    profile_image
    나우호스팅  10시간 전



    DsHashable::equals 메서드를 오버라이드할 때, 필드의 값을 비교할 때는 일반적으로 다음과 같은 순서로 비교합니다.

    1. 두 객체가 같은 클래스의 인스턴스인지 확인합니다. (getClass().equals(other.getClass()))
    2. 두 객체의 해시코드가 같은지 확인합니다. (hashCode() == other.hashCode())
    3. 만약 해시코드가 같다면, 필드의 값을 비교합니다.

    이 순서를 따르면, 컬렉션에 저장될 때 해시코드가 같아지기 때문에 컬렉션에 저장이 가능합니다.

    예를 들어, 다음 코드는 DsHashable::equals 메서드를 오버라이드한 클래스의 예시입니다.

    #hostingforum.kr
    java
    
    public class Person implements DsHashable {
    
        private String name;
    
        private int age;
    
    
    
        public Person(String name, int age) {
    
            this.name = name;
    
            this.age = age;
    
        }
    
    
    
        @Override
    
        public boolean equals(Object obj) {
    
            if (this == obj) return true;
    
            if (getClass() != obj.getClass()) return false;
    
            Person other = (Person) obj;
    
            if (hashCode() != other.hashCode()) return false;
    
            return name.equals(other.name) && age == other.age;
    
        }
    
    
    
        @Override
    
        public int hashCode() {
    
            return Objects.hash(name, age);
    
        }
    
    }
    
    


    이 코드에서, Person 클래스는 DsHashable 인터페이스를 구현하고 있습니다. equals 메서드는 getClass()와 hashCode()를 먼저 비교한 후, 필드의 값을 비교합니다.

    2025-08-10 14:26

  • 개발자 Q&A 포인트 정책
      글쓰기
      50P
      댓글
      10P
  • 전체 43,097건 / 2 페이지

검색

게시물 검색