questions
tae0255 edited this page Dec 6, 2021
·
2 revisions
public static class MeaningOfThis {
public final int value = 4;
public void doIt() {
int value = 6;
Runnable r = new Runnable() {
public final int value = 5;
@Override
public void run() {
int value = 10;
System.out.println(value);
System.out.println(this.value);
}
};
r.run();
}
}
10행에 run() 메서드 내부의 지역변수 value
를 출력하는 코드를 추가했습니다. 실행결과는 아래와 같습니다.
10
5
final
키워드를 사용해도 변수 쉐도잉은 일어나고 value
로는 메서드 내부 지역변수(9행)가 호출되어 10
을 출력합니다.
this.value
는 가장 가까운 스코프의 객체(Runnable
) 멤버 변수(4행)에 접근하여 5
를 출력한 것입니다.
추가로, 람다에서는 변수 쉐도잉이 일어나지 않는다고 합니다.
변수 쉐도잉: 마치 그림자를 드리우듯이, 스코프에 따라 상위 스코프의 멤버가 현재 스코프의 멤버에 의해 가려지는 것을 말함.
int x = 50;
public void foo(){
int x = 10;
System.out.println(x); //결과는 10
}
- CHAP01 (역사)
- CHAP02 (동작 파라미터화)
- CHAP03 (람다)
- CHAP04 (스트림 소개)
- CHAP05 (스트림 활용)
- CHAP06 (스트림으로 데이터 수집)
- CHAP07 (병렬 데이터 처리와 성능)
- CHAP08 (컬렉션 API 개선)
- CHAP09 (리팩토링, 테스팅, 디버깅)
- CHAP10 (람다 이용한 도메인 전용용어)
- CHAP11 (null대신 Optional 클래스)
- CHAP12 (새로운 날짜와 시간 API)
- CHAP13 (디폴트 메서드)
- CHAP14 (자바 모듈 시스템)
- CHAP15 (CompletetableFuture와 리액티브 프로그래밍 컨셉의 기초)
- CHAP16 (CompletetableFuture: 안정적 비동기 프로그래밍)
- CHAP17 (리액티브 프로그래밍)
- CHAP18 (함수형 관점으로 생각하기)
- CHAP19 (함수형 프로그래밍 기법)
- CHAP20 (OOP와 FP의 조화 : 자바와 스칼라 비교)
- CHAP21 (결론 그리고 자바의 미래)