JAVA

object 클래스와 equals(), hashCode()메서드

jiyoon12 2025. 4. 26. 14:54

equals() 메서드

  • 기능: 두 객체의 동등성을 비교한다.
  • 기본 동작: 참조 비교(==)를 수행하여 두 객체가 동일한 메모리 주소를 가리키는지 확인.
  • 재정의 목적: 논리적 동등성을 비교 (예: 책의 제목, 저자, ID가 같으면 같은 책으로 간주).
  • 주의사항: equals()를 재정의할 때는 hashCode()도 반드시 재정의해야 한다.

hashCode() 메서드

  • 기능: 객체의 해시코드를 반환한다. 해시코드는 객체를 고유하게 식별할 수 있는 정수 값으로, 객체를 효율적으로 저장하고 검색할 때 사용된다.
  • 기본 동작: 객체의 메모리 주소를 기반으로 고유한 정수 값을 생성.
  • 재정의 목적: 논리적으로 동일한 객체가 동일한 해시코드를 반환하도록 보장하여, equals()와 일관성 유지.

 

package _object;

//import java.lang.Object;
//import java.lang.*;

//import java.lang.* 패키지도 자동으로 넣어준다.

/**
 * Object 최상위 클래스에 대한 이해
 * 기본적으로 Object 클래스 상속을 받는다.
 * 자바는 Object 클래스(모든 클래스의 최상위 클래스)를 제외 하고
 * 던일 상속만을 제공합니다.
 */

//public class Book extends Object {
public class Book {
    private int bookTypeId;
    private String title;
    private String author;

    public Book(int bookTypeId, String title, String author) {
        this.bookTypeId = bookTypeId;
        this.title = title;
        this.author = author;
    }

    @Override
    public boolean equals(Object obj) {
        // 재정의 해보자.
        if(obj instanceof Book){
            // Book 타입이 맞다면 추가적으로,제목이  같다면 같은 책으로 판단
            // this.제목 == obj.제목 && this.저자 == obj.저자
            if(this.title.equals(((Book) obj).title) && this.author.equals(((Book) obj).author)) {
                return true;
            } else {
                return false;
            }
        } else {
            return false;
        }
    }
    // equals() 메서드를 재정의 할 때는 hashCode() 메서드를 재정의 해주어야
    // 의도하지 않은 동작을 막을 수 있다.

    @Override
    public int hashCode() {
        // hashCode -> 이 객체의 고유한 정수값을 만들어서 독립적인 녀석을 보장하는 정수값
        return bookTypeId;
    }


    //showInfo();
//    @Override
//    public String toString() {
//        return "title : " + title + " , " + "author : " + author;
//    }

    // 테스트 코드
    public static void main(String[] args) {

        // 물리적인 객체 주소값은 다르지만 equals() 메서드를 재정의해서
        // 논리적으로 책 이름과 저자 이름리 같다면 같은 녀석으로 바라 보게
        // 프로그램을 만들어주세요

        // 책 제목과 그리고 저자이름이 같다면 논리적으로 같은 책으로 판별
        Book book1 = new Book(1, "데미안", "헤르만헤세");
        Book book2 = new Book(1, "데미안", "헤르만헤세");
        Book book3 = new Book(2, "자바", "홍길동");
        Book book4 = new Book(1, "데미안", "파울로고엘료");

        String str1 = new String("데미안");

        System.out.println(book1.toString()); // 주소값 반환
        System.out.println(book2.toString());

        boolean result1 = book1.equals(book2);
        boolean result2 = book1.equals(str1);
        boolean result3 = book1.equals(book3);
        boolean result4 = book1.equals(book4);

        System.out.println("result1 : " + result1 );
        System.out.println("result2 : " + result2 );
        System.out.println("result3 : " + result3 );
        System.out.println("result4 : " + result4 );

    }
}

'JAVA' 카테고리의 다른 글

String 클래스  (0) 2025.04.26
자바 API 문서 확인하기  (0) 2025.04.26
object 클래스와 toString() 메서드  (0) 2025.04.26
swing  (0) 2025.04.26
인터페이스와 추상 클래스 활용한 코드 작성  (0) 2025.04.26