본문 바로가기
기초 및 언어/▶ Java&JSP

26. 패키지 - Object

by 류딩이 2025. 8. 22.

📌 자바 Object 클래스 메서드 오버라이딩

자바에서 모든 클래스는 자동으로 Object 클래스를 상속받습니다.
따라서 우리가 작성하는 모든 클래스는 Object의 메서드를 사용할 수 있는데, 그중에서 가장 많이 사용하는 것이 바로 toString()equals() 입니다.

 

 


1. Object 클래스란?

  • 자바의 최상위 부모 클래스
  • 모든 클래스는 자동으로 extends Object가 생략되어 있음
  • 대표적인 메서드
    • toString() → 객체를 문자열로 표현
    • equals(Object obj) → 두 객체가 같은지 비교
    • hashCode(), clone() 등

 


 

2. 예제 코드

 
class Student {
    private int hakbun;
    private String name;

    // 생성자
    public Student(int hakbun, String name) {
        this.hakbun = hakbun;
        this.name = name;
    }

    // getter
    public int getHakbun() { return hakbun; }
    public String getName() { return name; }

    // toString() 오버라이딩
    @Override
    public String toString() {
        return hakbun + "," + name;
    }

    // equals() 오버라이딩
    @Override
    public boolean equals(Object obj) {
        if (obj instanceof Student) {
            Student s = (Student) obj; // 다운캐스팅
            return this.hakbun == s.hakbun && this.name.equals(s.name);
        }
        return false;
    }
}

public class Ex01_Object {
    public static void main(String[] args) {
        Student s1 = new Student(2020, "인간1");
        Student s2 = new Student(2023, "인간2");

        // getter 사용
        System.out.println(s1.getHakbun()); // 2020
        System.out.println(s1.getName());   // 인간1

        // toString() 출력
        System.out.println(s1.toString());  // 2020,인간1
        System.out.println(s2);             // 2023,인간2 (자동 toString 호출)

        // equals() 출력
        boolean x = s1.equals(s2);
        System.out.println("x : " + x);     // false
    }
}

 


3. toString() 오버라이딩

  • 기본 toString() → 객체의 주소값(클래스명@해시코드)을 반환
  • 오버라이딩 → 객체의 상태(필드 값) 을 문자열로 반환
  • 예시:
@Override
public String toString() {
    return hakbun + "," + name;
}

 

👉 System.out.println(s1) 호출 시 자동으로 toString() 실행됨

 


4. equals() 오버라이딩

  • 기본 equals() → 두 객체의 주소값 비교 (== 와 동일)
  • 오버라이딩 → 객체의 내용(필드 값) 비교 가능
  • Object 타입으로 매개변수를 받기 때문에, 자식 클래스 타입을 사용하려면 다운캐스팅 필요
  • 예시:
@Override
public boolean equals(Object obj) {
    if (obj instanceof Student) {
        Student s = (Student) obj;
        return this.hakbun == s.hakbun && this.name.equals(s.name);
    }
    return false;
}

 


5. 실행 결과

2020
인간1
2020,인간1
2023,인간2
x : false

 

 


6. 핵심 정리

  1. Object 클래스
    • 자바의 최상위 부모 클래스, 모든 클래스가 상속받음
  2. toString()
    • 기본: 주소값 출력
    • 오버라이딩: 객체 정보를 문자열로 표현
  3. equals()
    • 기본: 주소 비교
    • 오버라이딩: 객체의 내용을 기준으로 비교
  4. 다운캐스팅 필요
    • equals(Object obj) → 반드시 Object 타입으로 받기 때문에 자식 타입으로 변환해야 함

👉 정리하면, toString() 은 출력용, equals() 는 비교용으로 많이 오버라이딩합니다.
객체를 다룰 때 이 두 메서드를 재정의하면 출력, 디버깅, 데이터 비교가 훨씬 더 직관적이고 편리해집니다.