자바를 공부하다보면 public String toString()을 자주 마주치게 된다.
이 것을 응용해서 사용하는방법과 용법에 대해서 이해한 바를 나타내고자 한다.
다음과 같은 클래스가 있다고 하자.
class Coffee {
int price;
public Coffee(int price){
this.price = price;
}
}
class Americano extends Coffee{
public Americano(){
super(4000);
}
public String toString(){
return "아메리카노";
}
}
class Customer {
int money = 50000;
void buyCoffee(Coffee coffee){
if(money < coffee.price){
System.out.println("잔액이부족합니다");
}
money = money - coffee.price;
System.out.println(coffee + "를 구입했습니다.");
}
}
- 위의 Americano 클래스는 Coffee 클래스를 상속받고있다.
- 그렇기 때문에 super()메서드로 Coffee 클래스의 생성자를 이용할 수 있다.
- 그리고 Customer 클래스의 buyCoffee 메서서드에서는 Coffee클래스를 참조변수로 받고있는데, 이때 우리는 Americano 클래스를 이용할 수 있다.
Americano 클래스에 보면,
public String toString()메서드가 보인다. 이것은 어떤 방법으로든 Americano 객체를 호출했을 때 내부의 글귀가 노출되게 한다.
public class Main {
public static void main(String[] args) {
Customer customer = new Customer();
customer.buyCoffee(new Americano());
System.out.println("현재 잔액은" + customer.money + "원 입니다.");
}
}
Customer 클래스의 buyCoffee메서드를 보면
System.out.println에서 coffee를 호출한다.
- 실행에서 보면 buyCoffee의 참조변수로 Americano 클래스를 받고있다.
- 이 상태에서 coffee를 호출하게되면 Americano 클래스 내부의 toString메서드가 자동으로 호출되어 coffee 대신에 "아메리카노"가 들어간다.
정리하자면, 우리는 클래스 내부에서 public String toString()메서드를 선언해서 System.out.println(인스턴스의 이름)을 호출했을 때 출력 될 문자열을 지정할 수 있다.