📌 자바 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. 핵심 정리
- Object 클래스
- 자바의 최상위 부모 클래스, 모든 클래스가 상속받음
- toString()
- 기본: 주소값 출력
- 오버라이딩: 객체 정보를 문자열로 표현
- equals()
- 기본: 주소 비교
- 오버라이딩: 객체의 내용을 기준으로 비교
- 다운캐스팅 필요
- equals(Object obj) → 반드시 Object 타입으로 받기 때문에 자식 타입으로 변환해야 함
👉 정리하면, toString() 은 출력용, equals() 는 비교용으로 많이 오버라이딩합니다.
객체를 다룰 때 이 두 메서드를 재정의하면 출력, 디버깅, 데이터 비교가 훨씬 더 직관적이고 편리해집니다.
'기초 및 언어 > ▶ Java&JSP' 카테고리의 다른 글
| 28. Calendar, Date, SimpleDataFormat (0) | 2025.08.22 |
|---|---|
| 27. 패키지 - String (3) | 2025.08.22 |
| 25. 예외 처리(try ~ catch ~ finally), throw, Exception (0) | 2025.08.20 |
| 24. 익명클래스 (3) | 2025.08.20 |
| 23. 추상클래스, 인터페이스 (5) | 2025.08.20 |