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 |