# 스코프와 this
.toString() 자체가 문자열타입으로 변환시켜주는 메소드인데 똑같은 명칭으로 직접 정의해서 사용한 이유가 있는걸까요?
#### CODE <a class='btn btn-default' href='/codes/20726'>Link</a>
```
public class CoffeeTest {
public static void main(String[] args) {
// 커피 객체 생성
Coffee americano = new Coffee("아메리카노", 1500);
System.out.printf("커피값 인상 전 => %s\n", americano.toString());
// 커피 값 인상: 1500 -> 1800
americano.setPrice(1800);
System.out.printf("커피값 인상 후 => %s\n", americano.toString());
}
}
class Coffee {
// 필드(인스턴스 변수)
private String name;
private int price;
// 생성자
public Coffee(String name, int price) {
/* 1. this 키워드를 사용하여 필드를 초기화하세요.*/
this.name = name;
this.price = price;
}
// 세터
public void setPrice(int price) {
/* 2. this 키워드를 사용하여 필드를 변경하세요.*/
this.price = price;
}
// 메소드
public String toString() {
return String.format("Coffee { name: %s, price: %d }", name, price);
}
}
```
#### INPUT
```
```
#### OUPUT
```
커피값 인상 전 => Coffee { name: 아메리카노, price: 1500 }
커피값 인상 후 => Coffee { name: 아메리카노, price: 1800 }
```
sehongpark님의 답변
# 메소드 오버라이딩
똑같은 이름의 메소드를 새롭게 정의하는 것. 이를 메소드 오버라이딩이라 합니다. 이를 통해 기존의 정해진 문자열이 아닌, 사용자가 원하는 결과를 만들 수 있습니다.
## toString() 메소드를 새로 만들지 않는다면?
우리가 원하는 출력 값
```
Coffee { name: 아메리카노, price: 1500 }
```
이 아닌, 다른 문자열이 출력 됩니다.
decsh님의 답변
아하! 봤던건데도 실제 문제에서 튀어나오면 머리가 안돌아가 버리고 마는군요 ㅠㅠ 감사합니다!