# 스코프와 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 } ```
# 메소드 오버라이딩 똑같은 이름의 메소드를 새롭게 정의하는 것. 이를 메소드 오버라이딩이라 합니다. 이를 통해 기존의 정해진 문자열이 아닌, 사용자가 원하는 결과를 만들 수 있습니다. ## toString() 메소드를 새로 만들지 않는다면? 우리가 원하는 출력 값 ``` Coffee { name: 아메리카노, price: 1500 } ``` 이 아닌, 다른 문자열이 출력 됩니다.
아하! 봤던건데도 실제 문제에서 튀어나오면 머리가 안돌아가 버리고 마는군요 ㅠㅠ 감사합니다!