- 어떤 객체의 정보를 문자열로 변환하여 리턴
- 기본적으로 Object 클래스의 toString() 메서드는 객체의 정보(=주소값)를 문자열로 리턴하도록 정의되어 있음'
- 일반적으로 객체의 정보는 객체 내의 멤버변수에 저장된 데이터(속성값)를 의미하므로 Object 클래스의 toString() 메서드를 오버라이딩하여 객체가 가진 멤버변수값을 문자열로 결합하여 리턴하도록 해야함
- 출력문 내에는 toString() 메서드 생략 가능(참조변수명만 사용 가능)
- 자바에서 제공하는 대부분의 클래스(API)들은 toString() 메서드가 오버라이딩 되어있으므로 객체에 저장된 값을 문자열로 리턴받기 가능 ex) String 클래스, ArrayList 클래스 등
- equals() 메서드와 마찬가지로 단축키를 통한 자동생성 가능 => 단축키 : alt shisf s s
String str = new String("자바"); //String 타입도 객체다!
System.out.println("str : " + str);
} //main
} //class
class Person2 {
String name;
int age;
String jumin;
//alt shift s o
public Person2(String name, int age, String jumin) {
super();
this.name = name;
this.age = age;
this.jumin = jumin;
}
}
str : 자바
Person2 p = new Person2("땅콩이", 2, "123456-1234567");
System.out.println("p : " + p);
결과가 p : object.Person2@626b2d4a 이렇게 주소값으로 나온다.
이때 p는 p.toString()과 같은 결과를 지닌다.
System.out.println("p : " + p);
System.out.println("p.toString() : " + p.toString());
➡️println() 메서드 내에서 p 객체 정보 출력 시 toString() 생략 가능
출력문이 아닌 결과값을 변수에 저장하는 경우 반드시 toString() 필수!
String personInfo = p.toString();
object 클래스의 toString() 메서드는 "클래스명@주소값" 형태의 문자열로 리턴
➡️주소값은 16진수로 변환되어 문자열로 결합됨
System.out.println("person2 p의 클래스명 : " + p.getClass().getName());
System.out.println("person2 p의 주소값 : " + p.hashCode());
person2 p의 클래스명 : object.Person2 person2 p의 주소값 : 1651191114
참조변수로 출력했을 때 오버라이딩을 사용하면 원하는 출력값을 나타낼 수 있다.
class Person3 {
String name;
int age;
String jumin;
//alt shift s o
public Person3(String name, int age, String jumin) {
super();
this.name = name;
this.age = age;
this.jumin = jumin;
}
@Override
public String toString() {
// 현재 인스턴스가 가진 멤버들을 모두 문자열로 결합하여 리턴
// => 결합하는 형태(출력 모양)는 개발자가 알아서 결정
return "이름 : " + name + ", 나이 : " + age + ", 주민번호 : " + jumin;
}
➡️ 하나의 문자열로 출력되도록 코드 작성
➡️단축키 : alt sihift s s
Person3 p2 = new Person3("땅콩이", 2, "123456-1234567");
System.out.println("p2 객체 정보 : " + p2.toString());
System.out.println("p2 객체 정보 : " + p2);
p2 객체 정보 : 이름 : 땅콩이, 나이 : 2, 주민번호 : 123456-1234567 p2 객체 정보 : 이름 : 땅콩이, 나이 : 2, 주민번호 : 123456-1234567
로 같은 결과가 나온다.
📌toString() 메서드 자동 생성(오버라이딩) 단축키 : alt sift s s
예제
Account 클래스 정의
- 멤버변수
- 계좌번호(accountNo, 문자열), 예금주명(ownerName, 문자열), 현재잔고(balance, 정수)
- 생성자 : 계좌번호, 예금주명, 현재잔고를 전달받아 초기화
- equals() 메서드 오버라이딩하여 계좌정보를 비교하도록 정의
- toString() 메서드 오버라이딩하여 계좌정보를 문자열로 리턴하도록 정의
package object;
import java.util.Objects;
public class Test2 {
public static void main(String[] args) {
//acc와 acc2 생성 후 두 계좌의 정보 비교 및 참조변수 출력시 toString() 메서드 활용하여 결과보기
Account acc = new Account("123456-1234567", "땅콩이", 10000);
System.out.println("acc의 계좌정보" + acc); //acc.toString()
Account acc2 = new Account("123456-1234567", "땅콩이", 10000);
if(acc.equals(acc2)) {
System.out.println("두 계좌는 동일한 계좌입니다.");
} else {
System.out.println("두 계좌는 다른 계좌입니다.");
}
}
}
/*
* Account 클래스 정의
* - 멤버변수
* - 계좌번호(accountNo, 문자열), 예금주명(ownerName, 문자열), 현재잔고(balance, 정수)
* - 생성자 : 계좌번호, 예금주명, 현재잔고를 전달받아 초기화
* - equals() 메서드 오버라이딩하여 계좌정보를 비교하도록 정의
* - toString() 메서드 오버라이딩하여 계좌정보를 문자열로 리턴하도록 정의
*/
class Account {
String accountNo;
String ownerName;
int balance;
// alt shift s o
public Account(String accountNo, String ownerName, int balance) {
super();
this.accountNo = accountNo;
this.ownerName = ownerName;
this.balance = balance;
}
//alt shift s h
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Account other = (Account) obj; // 다운캐스팅
return Objects.equals(accountNo, other.accountNo) && balance == other.balance
&& Objects.equals(ownerName, other.ownerName);
}
// alt shift s s
@Override
public String toString() {
return "계좌번호 : " + accountNo + ", 예금주명 : " + ownerName + ", 잔고 : " + balance;
}
}
'JAVA' 카테고리의 다른 글
[JAVA] String 클래스의 여러가지 메서드와 활용 ① (1) | 2023.10.11 |
---|---|
[JAVA] String 객체 - 문자열 생성 방법 두 가지 (0) | 2023.10.11 |
[JAVA] object 클래스 (0) | 2023.10.11 |
[JAVA] 인터페이스 ⑤ - 인터페이스의 필요성(3) (0) | 2023.10.11 |
[JAVA] 인터페이스 ④ - 인터페이스의 필요성(2) (1) | 2023.10.10 |