# 스코프와 this
<div class="embed-responsive embed-responsive-16by9">
<iframe src="https://www.youtube.com/embed/QBfDqqWQ71E" frameborder="0" allowfullscreen></iframe>
</div>
---
## 목차
1. 스코프란?
2. 스코프의 종류
3. 퀴즈: 변수의 탐색방식
4. this 키워드
---
## 스코프란?
모든 변수들은 자신이 선언된 영역에 따른 활동영역을 갖습니다. 이러한 활동영역을 스코프(scope)라고 합니다. 스코프(scope)..! 어디서 많이 들어본 것 같지 않습니까? 맞습니다. 우리는 예전 메소드를 공부하면서 변수의 활동영역 이라는 주제를 배웠습니다. '부산 철수가 밥먹는다고 서울 철수가 배부른건 아니다.'라는 예제를 들면서 말이죠.
![Imgur](https://i.imgur.com/sxNR6IE.png)
## 스코프의 종류
이러한 변수의 스코프는 크게 두 종류로, 지역변수와 파라미터가 활동하는 메소드 스코프와 인스턴스변수(필드)가 활동하는 클래스 스코프로 나뉩니다.
+ 메소드 스코프
+ 클래스 스코프
```
public class ScopeReview {
private int instanceVar;
public void scopeMethod(int paramVar) {
instanceVar = paramVar;
String localVar = "";
if (paramVar > 0)
localVar = "0 보다 큽니다.";
else
localVar = "0 보다 작거나 같습니다.";
System.out.println(localVar);
}
}
```
위 코드를 예로 확인해봅시다. 메소드 내부의 파라미터 `paramVar`와 지역변수 `localVar`는 **메소드 스코프**를 갖고, 클래스의 필드인 `instanceVar`는 **클래스 스코프**를 갖습니다.
## 퀴즈: 변수의 탐색 방식
그렇다면 여기서 퀴즈! 다음 코드의 출력결과는 무엇일까요?
```
public class ScopeQuiz {
private String answer;
public ScopeQuiz(String answer) {
answer = answer;
}
public String getAnswer() {
return answer;
}
public static void main(String[] args) {
ScopeQuiz quiz = new ScopeQuiz("가까운 스코프부터 찾음!");
System.out.println(quiz.getAnswer());
}
}
```
위 퀴즈는 변수 탐색이 어떤 방식으로 이루어지는가를 묻는 문제입니다. 정답부터 말하자면 출력 값은 `null` 입니다. 왜냐하면 변수의 탐색은 가장 가까운 스코프부터 시작되기 때문입니다. 따라서 생성자에 작성된 answer는 가장 가까운 메소드 스코프의 파라미터 answer가 됩니다. 때문에 인스턴스변수 answer는 결코 변경되지 않습니다.
## this 키워드
그렇다면 위에서 발생한 상황 즉, 같은 이름의 파라미터와 인스턴스변수를 적절하게 구분하지 못한 문제를 어떻게 해결 할 수 있을까요? 이는 `this` 키워드를 사용함으로써 해결 할 수 있습니다. this 키워드란 자기 자신의 객체를 가리키는 키워드입니다. 퀴즈에서 제시한 코드를 아래와 같이 변경하여 실행시켜 보세요.
```
public class ScopeQuiz {
private String answer;
public ScopeQuiz(String answer) {
// this: 자기 자신의 객체를 가리키는 키워드
this.answer = answer;
}
public String getAnswer() {
return answer;
}
public static void main(String[] args) {
ScopeQuiz quiz = new ScopeQuiz("가까운 스코프에부터 찾음!");
System.out.println(quiz.getAnswer());
}
}
```
위 코드는 아래와 같은 결과를 반환합니다. 어때요, 참 쉽죠?
```
가까운 스코프에부터 찾음!
```
---
## 확인하기
1. 스코프란 무엇입니까?
2. this 키워란 무엇인지 설명하고, 간단한 사용예를 알려주세요.