# 스코프와 this #### 이름이 같아 생기는 문제? 클래스의 필드와 메소드의 파라미터 이름이 같은 경우, 문제가 생길 수 있습니다. 아래 코드의 생성자는 잘 동작할까요? 잘 안됩니다. 필드의 값은 변경되지 않고, 파라미터 자신의 값을 그대로 대입할 뿐입니다. 왜일까요? 스코프가 중복되었기 때문입니다. ``` // 호출 영역 Cookie c = new Cookie("버터링", 1500); // 정의 영역 class Cookie { private String name; private int price; public Cookie(String name, int price) { name = name; // 인스턴스 변수 name 초기화(X) price = price; // 인스턴스 변수 price 초기화(X) } } ``` #### this 키워드 파라미터와 필드의 이름이 같은 경우, `this` 키워드 통해 이를 해결할 수 있습니다. this 키워드는 메소드 수행의 주체 객체를 가리키기 때문입니다. 이를 통해 같은 이름의 파라미터 name과 구분할 수 있게 되었습니다. ``` // 호출 영역 Cookie c = new Cookie("버터링", 1500); c.setPrice(2000); // 정의 영역 class Cookie { private String name; private int price; // 생성자 public Cookie(String name, int price) { this.name = name; // this.name -> 인스턴스 변수 this.price = price; // this.price -> 인스턴스 변수 } // 세터 public void setName(String name) { this.name = name; // this.name -> 인스턴스 변수 } } ``` ## 문제 주어진 코드로 커피 객체를 생성하고, 또 그 가격을 인상하려 한다. 해당 코드 문제를 찾아 수정하여, 출력 예와 같은 결과 얻으시오. ## 출력 예 ``` 커피값 인상 전 => Coffee { name: 아메리카노, price: 1500 } 커피값 인상 후 => Coffee { name: 아메리카노, price: 1800 } ```
관련 강의로 이동

코드: java 1.8

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 키워드를 사용하여 필드를 초기화하세요.*/ name = name; price = price; } // 세터 public void setPrice(int price) { /* 2. this 키워드를 사용하여 필드를 변경하세요.*/ price = price; } // 메소드 public String toString() { return String.format("Coffee { name: %s, price: %d }", name, price); } }

입력

정답이 궁금하다면? 코드를 제출해보세요!