[Java] Object 클래스 - 동등 비교

우쓰·2023년 11월 3일
0

Java

목록 보기
1/10

[이것이 자바다] 공부

내용

클래스를 선언할때 다른 클래스를 상속하지 않으면
Object 클래스를 상속하게 된다.

따라서 모든 클래스는 Object클래스의 자식 클래스이다.

[객체 동등 비교]

동등 비교란?

객체는 달라도 내부 데이터가 같은지 비교하는 것

Object클래스의 equals() 메소드는 객체의 번지를 비교하여 boolean 값을 리턴한다.

equals() 메소드와 같이 hashCode() 메소드 역시 객체가 달라도 내부 데이터가 동일하면 같은 정수 값을 리턴한다.

(예제)

public class Member {
  private int no;
  private String name;

  public Member(int no, String name) {
    this.no = no;
    this.name = name;
  }

  public int getNo() {
    return no;
  }

  public String getName() {
    return name;
  }

  // no, name 해시코드를 합한 해시코드를 리턴
  // (no, name 이 같으면 동일한 해시코드가 생성된다)
  @Override
  public int hashCode() {
    int hashCode = no + name.hashCode();
    return hashCode;
  }

  @Override
  public boolean equals(Object obj) {

    if (obj instanceof Member target) {
      if (no == target.getNo() && name.equals(target.getName())) {
        return true;
      }
    }
    return false;
  }
}
public class HashCodeExample {

  public static void main(String[] args) {
    Member member1 = new Member(1, "홍길동");
    Member member2 = new Member(1, "홍길동");

    if (member1.hashCode() == member2.hashCode()) {
      if (member1.equals(member2)) {
        System.out.println("동등 객체");
      } else {
        System.out.println("데이터가 다릅니다.");
      }
    } else {
      System.out.println("해시코드가 다릅니다.");
    }

  }

}

실행시 콘솔 창

동등 객체

[레코드 선언]

새롭게 알게된 것

  • hashCode() 메소드로 동등 비교를 할 수 있다는 것
  • HashSet은 동등 객체를 중복으로 저장하지 않는다고 알고 있었는데
    hashCode()와 equals() 메소드를 이용하여 중복 확인한다는 것을 알게 되었다.

0개의 댓글

Powered by GraphCDN, the GraphQL CDN