자바, 객체지향!

자바, 객체지향!

자바 프로그래밍의 꽃, 조립식 프로그래밍!

28 스코프와 this

# 스코프와 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 키워란 무엇인지 설명하고, 간단한 사용예를 알려주세요.

Challenge

개념 실습! 학습 내용을 진짜 내 것으로 만들기!