3.7.2 람다 표현식을 감싸는 유효 범위에 속한 변수 접근
종종 람다 표현식에서 자신을 감싼 메서드나 클래스에 속한 변수에 접근하고 싶을 때가 있다.
public static void repeatMessage(String text, int count) {
Runnable r = () -> {
for (int i = 0; i < count; i++) {
System.out.println(text);
}
};
new Thread(r).start();
}
이 코드에서는 람다 표현식이 자신의 내부가 아니라 자신을 감싸는 유효 범위에 정의된 매개변수(text와 count)에 접근한다는 점을 주목하자.
그리고 다음 호출을 보자.
repeatMessage("Hello", 1000); // 별도의 스레드에서 Hello를 1,000번 출력한다.
이제 람다 표현식 내부에서 사용한 text와 count 변수를 보자. 이 부분에서 무슨 일이 일어나고 있는지 아리송하다. 람다 표현식의 코드는 repeatMessage 호출이 반환되어 매개변수가 사라지고 나서 한참 뒤에 실행할지도 모른다. 그런데 text와 count 변수는 어떻게 람다 표현식이 실행될 시점까지 남아 있을 수 있을까?