# 스코프와 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 }
```