⭐오브젝트 클래스
Object Class
Object 클래스는 모든 클래스의 최상위 클래스다.
자바는 Object 클래스를 제외하고 하나의 상속만을 제공한다.
java.lang 패키지 안에 존재하며
import java.lang.*; 임포트 하지 않아도 자동으로 가져와준다.
이를 통해 많은 마더 메서드를 상속받아 쓸 수 있다.
대표적으로는 toString(), equals(), hashCode() 등이 있다.
⭐toString()
객체의 주소값을 호출
재정의: 모든 객체에 공통 메서드를 만들어주고 싶을때
⭐ equals()
두 객체의 동등성 == 비교
재정의: 서로 다른 객체가 논리적으로 동등하도록 만들고 싶을때
⭐ hashCode()
객체의 고유한 정수값을 만들어서 독립성을 보장
빠른 검색과 분류 저장을 가능하게 한다. ex)도서관
재정의: 동일 상품에 같은 고유값을 주고 싶을때
오브젝트 클래스를 직접 호출할 수도 있지만 그럴 필요는 없다.
자동으로 상속되기 때문이다.
예제)
내용이 같은 객체라고 하더라도
서로 다른 주소값을 가지고 있으면 다른 객체다.
하지만 상점의 상품이나 도서관의 책처럼
논리적으로는 같은 객체로 바라봐야할 때도 생긴다.
오브젝트 클래스의
equals() 메서드를 오버라이드(덮어쓰기)로 재정의해
책 제목과 저자가 같으면 논리적으로 같게 처리하는 방법을 연습해봤다.
package _object;
/**
* 4.24
* Object 최상위 클래스 이해
*
* 클래스를 만들면
* 기본적으로 Object 클래스를 상속받도록 돼 있다.
*
* Object 클래스는 모든 클래스의 최상위 클래스다.
*
* 자바는 Object 클래스를 제외하고
* 단일 상속만을 제공한다.
*
* import java.lang.Object;
* import java.lang.*;
* 패키지도 자동으로 넣어준다
*/
//import java.lang.Object;
//import java.lang.*;
public class Book { //컴파일러가 'extends Object'를 자동으로 꽂아준다.
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) { //equals 메서드 재정의
if (obj instanceof Book) {
//Book 타입이 맞고, 제목도 같다면 같은 책으로 판별해보자
//this.title == title && 저자 == 저자
if (this.title.equals(((Book) obj).title) && this.author.equals(((Book) obj).author)) {
return true;
} else {
return false;
}
} else {
return false;
}
}
/*
equals 메서드를 재정의 할때는 haseCode 메서드를 재정의 해줘야
의도하지 않은 동작을 막을 수 있다.
hashCode
이 객체의 고유한 정수값을 만들어서 독립성을 보장하는 정수 값이다.
*/
@Override
public int hashCode() {
return bookTypeId;
}
//method - showInfo 대신 toString을 써보자
// @Override
// public String toString() {
//
// return "title:" + title + ", author:" + author;
// }
//main - 테스트 코드
public static void main(String[] args) {
/*
book1, boo2처럼
물리적 객체 주소값은 다르지만
equals 메서드를 재정의해서..
논리적으로 책 이름과 저자 이름이 같다면
같은 녀석으로 바라보도록
프로그램을 짤 수는 없을까?
*/
//object
Book book1 = new Book(1, "데미안", "헤르만 헤세");
Book book2 = new Book(1, "데미안", "헤르만 헤세");
Book book3 = new Book(2, "자바", "홍길동");
Book book4 = new Book(1, "데미안", "파울로코엘료");
//두 객체는 내용은 같지만 주소값이 달라
String stri1 = new String("데미안");
System.out.println(book1.toString()); // toString: 객체의 주소값을 반환
System.out.println(book2.toString());
boolean result1 = book1.equals(book2);
boolean result2 = book1.equals(stri1);
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);
}//end of main
}//end of class
'Java' 카테고리의 다른 글
문자열 String 과 StringBuffer, 특별한 클래스 (0) | 2025.04.24 |
---|---|
자바 API 문서, 보는 습관을 들이자 (0) | 2025.04.24 |
SCM, VSC, and 분산형 저장 시스템 Git(계속) (0) | 2025.04.24 |
인터페이스 Interface, 동작을 정의하는 추상타입 (0) | 2025.04.23 |
추상 클래스 Abstrct class, 부모클래스를 만들지만 객체로 만들기는 싫을때 (0) | 2025.04.22 |