자바의 정석[기초편]으로 공부한 내용을 정리한 글입니다.
기본 설명
- toString() 메서드는 객체 정보를 사람이 읽을 수 있는 문자열 형태로 반환해 주는 메서드입니다.
- 이 메서드는 Object 클래스에 정의되어 있으며, 모든 클래스의 조상이 Object이므로 모든 클래스는 기본적으로 toString() 메서드를 사용할 수 있습니다.
- 그러나 Object 클래스의 기본 toString()은 의미 없는 문자열을 반환합니다.
Object 클래스의 기본 toString() 구현
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
- 예를 들어, 클래스 이름이 Card이고, 해시코드가 193a55라면:
-
Card@193a55
예제 1 : Object의 기본 toString() 사용 결과
class Card {
String kind;
int number;
Card() {
this("SPADE", 1);
}
Card(String kind, int number) {
this.kind = kind;
this.number = number;
}
}
class Ex9_4 {
public static void main(String[] args) {
Card c1 = new Card();
Card c2 = new Card();
System.out.println(c1.toString());
System.out.println(c2.toString());
}
}
실행 결과
Card@19e0bfd
Card@193a55
- 여기서 확인할 수 있는 것:
- Card@19e0bfd → 클래스 이름 + 해시코드 조합
- 두 객체는 서로 다른 주소(참조값)을 가지므로 toString() 결과도 다릅니다.
- 기본 toString()은 객체 내부 정보는 출력하지 않음.
toString()의 오버라이딩
- 많은 클래스들은 toString() 메서드를 오버라이딩(재정의)하여 객체에 담긴 중요한 데이터를 출력할 수 있도록 합니다.
- 예를 들어 String, Date, Calendar, ArrayList 같은 클래스들은 모두 toString()을 오버라이딩하고 있음.
예제 2 : toString()을 오버라이딩한 클래스
class Card2 {
String kind;
int number;
Card2() {
this("SPADE", 1);
}
Card2(String kind, int number) {
this.kind = kind;
this.number = number;
}
public String toString() {
return "kind : " + kind + ", number : " + number;
}
}
class Ex9_5 {
public static void main(String[] args) {
Card2 c1 = new Card2();
Card2 c2 = new Card2("HEART", 10);
System.out.println(c1.toString());
System.out.println(c2.toString());
}
}
실행 결과
kind : SPADE, number : 1
kind : HEART, number : 10
설명
- Card2 클래스에서 toString()을 직접 정의하여 객체의 속성 값(kind와 number)을 문자열로 출력함.
- 이제 객체 정보를 확인할 때 Card@193a55 같은 추상적인 정보가 아닌, 실제 카드의 종류와 숫자를 출력할 수 있음.
결론 요약
Object.toString() | 클래스명@해시코드 형식의 문자열을 반환 (기본 구현) |
오버라이딩된 toString() | 객체의 내용을 사람이 읽기 쉬운 형식으로 출력하도록 커스터마이징 |
사용 목적 | 디버깅, 로그 출력, 객체 정보 확인 등에 매우 유용 |
'Java' 카테고리의 다른 글
문자열과 기본형 간의 변 (0) | 2025.06.22 |
---|---|
String클래스 (0) | 2025.06.22 |
Object클래스의 메서드 - hashCode() (0) | 2025.06.22 |
Object 클래스의 메서드 - equals() (0) | 2025.06.22 |
Object클래스 (0) | 2025.06.22 |