더북(TheBook)

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();

}


이 코드에서는 람다 표현식이 자신의 내부가 아니라 자신을 감싸는 유효 범위에 정의된 매개변수(textcount)에 접근한다는 점을 주목하자.

그리고 다음 호출을 보자.

repeatMessage("Hello", 1000); // 별도의 스레드에서 Hello 1,000번 출력한다.


이제 람다 표현식 내부에서 사용한 textcount 변수를 보자. 이 부분에서 무슨 일이 일어나고 있는지 아리송하다. 람다 표현식의 코드는 repeatMessage 호출이 반환되어 매개변수가 사라지고 나서 한참 뒤에 실행할지도 모른다. 그런데 textcount 변수는 어떻게 람다 표현식이 실행될 시점까지 남아 있을 수 있을까?

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.