최원종의 개발 블로그

Object 클래스의 메서드 활용 본문

Java/JAVA 유용한 클래스

Object 클래스의 메서드 활용

chl6698 2026. 3. 9. 12:35

Object 클래스의 메서드 활용.

Object 클래스의 메서드 중 일부는 재정의해서 사용할 수 있음.

재정의 할 수 없는 메서드는 final로 선언되어 있음.


toString() 메서드

  • 객체의 정보를 String으로 바꿔서 사용할 때 쓰임
  • String이나 Integer 클래스는 이미 재정의 되어 있음
//toString() 출력 형태
//클래스이름@해시코드

-코드

package com.tenco.object;

//자동으로 import 되는 패키지이다
//import java.lang.*;

import com.tenco.Inheritance.B;

/**
 * Object 클래스는 모든 클래스의 최상위 클래스이다
 * 자바는 기본적으로 단일 상속만을 지원하지만 단, Object 클래스는 예외이다
 */
//public class Book extends Object
public class Book extends Object {
    private String title;
    private String author;


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

    public void showInfo() {
        // ....
    }

    @Override
    public String toString() {
        return "제목 : " + title + ", " + "저자 : " + author;
    }

    // 테스트 코드
    public static void main(String[] args) {
        Book book = new Book("데미안", "헤르만헤세");
        System.out.println(book.toString());
    }
}
더보기
출력 화면

equals() 메서드

  • 기능 : 두 객체의 동등성을 비교
  • 기본 동작: 참조 비교( == )를 수행하여 두 객체가 동일한 메모리 주소를 가리키는지 확인.
  • 재정의 목적 : 논리적 동등성을 비교(ex: 책 제목, 저자, ID가 같으면 같은 책으로 간주)
  • 주의사항 : equals()를 재정의할 때는 hashCode()도 반드시 재정의 해야 함 (의도치 않은 결과 예방)
//equals()를 재정의 할 때 해시코드 메서드를 함께 재정의 해야 의도치 않은 결과를 예방할 수 있다
@Override
public int hashCode() {
    return bookTypeId;
}

-코드

package com.tenco.object;

//자동으로 import 되는 패키지이다
//import java.lang.*;

import com.tenco.Inheritance.B;

/**
 * Object 클래스는 모든 클래스의 최상위 클래스이다
 * 자바는 기본적으로 단일 상속만을 지원하지만 단, Object 클래스는 예외이다
 */
//public class Book extends Object
public class Book extends Object {
    private String title;
    private String author;


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

    @Override
    public boolean equals(Object obj) {
        // 물리적 주소 비교가 아닌 논리적으로 같다라고 판별하고 싶다면 자식 클래스에서 재정의하면
        // 기능을 구현해 준다.
        // 만약 책 제목 같다면 논리적으로 같은 책이라고 판단하고 true 반환 아니면 false 반환
        if (obj instanceof Book) {
            // Book 타입먼저 확인
            // 제목.equals("제목")
            Book targetBook = (Book) obj;
            // 데미안    equals     데미안
            if (this.title.equals(targetBook.title)) {
                return true;
            }
        }
        return false;
    }

    //    @Override
//    public String toString() {
//        return "제목 : " + title + ", " + "저자 : " + author;
//    }

    // 테스트 코드
    public static void main(String[] args) {
        Book book1 = new Book("데미안", "헤르만헤세");
        Book book2 = new Book("데미안", "헤르만헤세");
        Book book3 = book1;

        System.out.println(book1);
        System.out.println(book2);
        if (book1 == book2) {
            System.out.println("Heap 메모리 영역에 같은 객체를 가리키고 있다");
        } else {
            System.out.println("서로 다른 주소를 가지고 있어요. 다른 객체");
        }

        // Object 클래스의 메서드인 equals() 를 사용해서 각 객체의 주소값을 비교해보자.
        boolean result1 = book1.equals(book2);
        System.out.println("결과 book1과 book2에 논리적인 비교 결과  : " + result1);
        boolean result2 = book1.equals(book3);
        System.out.println("결과 book1과 book3에 논리적인 비교 결과 : " + result2);
    }
}

hashCode() 메서드

 

해시코드(Hash Code)는 객체를 식별하기 위해 사용하는 정수값(int).

자바에서는 각 객체를 빠르게 찾거나 비교하기 위해 해시코드를 사용

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

코드

package com.tenco.object;

//자동으로 import 되는 패키지이다
//import java.lang.*;

import com.tenco.Inheritance.B;

/**
 * Object 클래스는 모든 클래스의 최상위 클래스이다
 * 자바는 기본적으로 단일 상속만을 지원하지만 단, Object 클래스는 예외이다
 */
//public class Book extends Object
public class Book extends Object {
    private String title;
    private String author;
    private int bookTypeId;

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

    public void showInfo() {
        //.....
    }

//    @Override
//    public String toString() {
//        return "제목 : " + title + "," + "저자 : " + author;
//    }


    //equals()를 재정의 할 때 해시코드 메서드를 함께 재정의 해야 의도치 않은 결과를 예방할 수 있다
    @Override
    public int hashCode() {
        return bookTypeId;
    }

    @Override
    public boolean equals(Object obj) {
        //물리적 주소 비교가 아닌 논리적으로 같다라고 판별하고싶다면 자식 클래스에서 재정의하면
        //기능을 구현해 준다
        //만약 책 제목 같다면 논리적으로 같은 책이라고 판단하고 true 반환 아니면 false반환
        if (obj instanceof Book) {
            //Book 타입 먼저 확인
            //제목.equals("제목")
            Book targetBook = (Book) obj;
            //  데미안     equals   데미안
            if (this.title.equals(targetBook.title)) {
                return true;
            }
        }
        return false;
    }

    //테스트 코드
    public static void main(String[] args) {
        Book book1 = new Book("데미안", "헤르만헤세", 1);
        Book book2 = new Book("데미안", "헤르만헤세", 1);
        Book book3 = book1;

        System.out.println(book1);
        System.out.println(book1.hashCode());

        System.out.println("--------------------------------");
        System.out.println(book1);
        System.out.println(book2);

        if (book1 == book2) {
            System.out.println("Heap 메모리 영역에 같은 객체를 가리키고 있다");
        } else {
            System.out.println("서로 다른 주소를 가지고 있어요. 다른 객체");
        }

        //Object 클래스의 메서드인 equals()를 사용해서 각 객체의 주소값을 비교해보자
        boolean result1 = book1.equals(book2);
        System.out.println("결과 book1과 book2에 논리적인 비교 결과 " + result1);
        boolean result2 = book1.equals(book3);
        System.out.println("결과 book1과 book3에 논리적인 비교 결과 : " + result2);

    }
}

문제 1.

1. 책 제목과 저자가 같다면 논리적으로 같은 책이라고 판별하게 코드를 작성하시오

 

코드

package com.tenco.object;

//1. 책 제목과 저자가 같다면 논리적으로 같은 책이라고 판별하게 코드를 작성하시오

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

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

    @Override
    public int hashCode() {
        return bookTypeId;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj instanceof Book2) {
            Book2 targetBook = (Book2) obj;
            if (this.title.equals(targetBook.title)) {
                return true;
            }
        }
        return false;
    }

    //테스트 코드
    public static void main(String[] args) {
        //1. 책 제목과 저자가 같다면 논리적으로 같은 책이라고 판별하게 코드를 작성하시오
        Book2 book1 = new Book2("데미안", "헤르만헤세", 1);
        Book2 book2 = new Book2("홍길동전", "홍길동", 2);
        Book2 book3 = new Book2("데미안", "헤르만헤세", 1);

        if (book1 == book2) { // == 물리적인 주소 값
            System.out.println("같은 책입니다");
        } else {
            System.out.println("다른 책입니다");
        }

        if (book1.equals(book2)) { //equals는 논리적인 주소 값
            System.out.println("논리적으로 같은 책");
        } else {
            System.out.println("논리적으로 다른 책");
        }
    }
}

문제 2.

2. 스스로 클래스를 설계해서 equals() 재정의 hashcode() 재정의 해서 결과 확인
//equals()부분 책 제목과 저자가 같아야 값을 반환하도록 재정의함

 

코드

package com.tenco.object;

//2. 스스로 클래스를 설계해서 equals() 재정의 hashcode() 재정의 해서 결과 확인

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

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

    @Override
    public boolean equals(Object obj) {
        if (obj instanceof Book3) {
            Book3 targetBook = (Book3) obj;

            if (this.title.equals(targetBook.title) && this.author.equals(targetBook.author)) {
                return true;
            }
        }
        return false;
    }

    @Override
    public int hashCode() {
        return bookTypeId;
    }

    public static void main(String[] args) {

        //2. 스스로 클래스를 설계해서 equals() 재정의 hashcode() 재정의 해서 결과 확인
        Book3 book1 = new Book3("데미안", "헤르만헤세", 1);
        Book3 book2 = new Book3("홍길동전", "홍길동", 1);

        if (book1.equals(book2)) { //equals는 논리적인 주소 값
            System.out.println("논리적으로 같은 책");
        } else {
            System.out.println("논리적으로 다른 책");
        }
    }
}

 

'Java > JAVA 유용한 클래스' 카테고리의 다른 글

Inner class(중첩 클래스)  (0) 2026.03.12
Thread  (0) 2026.03.10
Exception(예외처리)  (0) 2026.03.10
String, StringBuffer  (0) 2026.03.10
Object 클래스란?  (0) 2026.03.09