[java] 람다 표현식에서 변수 스코프는 어떻게 동작하나요?

람다 표현식 내에서 외부 변수를 참조할 때, 해당 변수는 람다 표현식 내에서 읽기 전용으로만 사용하는 것이 보장되어야 합니다. 이는 변수가 effective final 이어야 한다는 것을 의미합니다. effective final 변수는 한 번만 할당되고 다시 값을 변경하지 않는 변수를 말합니다.

예를 들어, 다음과 같은 코드에서는 factor 변수를 람다 표현식 내에서 사용할 수 있습니다.

int factor = 3;
IntFunction<Integer> multiplier = (number) -> number * factor;

람다 표현식은 클로저(closure)로서 외부 변수를 캡처(capture)합니다. 이 때, 잠재적으로 어설픈(dubious) 변수 캡처란 람다 표현식 내에서 외부 변수의 값을 변경하는 경우를 의미합니다. 이러한 변수 캡처는 컴파일 에러를 발생시킬 수 있습니다.

또한, 람다 표현식에서 this 키워드는 람다를 감싸는 클래스의 인스턴스를 참조하므로 주의해야 합니다. 람다 표현식 내부에서의 this는 외부 클래스의 this와 다를 수 있습니다.

람다 표현식에서 변수의 스코프와 관련된 이러한 규칙을 이해하면, 더욱 효율적이고 안정적인 코드를 작성할 수 있습니다.

더 자세한 내용은 Java 공식 문서(The Java™ Tutorials - Lesson: Lambda Expressions)를 참고하시기 바랍니다.