[Java] 람다 캡처링 Lambda Capturing :: Java 8

동민·2021년 12월 16일
0

Lambda 식을 이용하여 메소드를 작성 할 때, 람다 내부에서 람다 외부 변수를 수정하려고 하면,
위와 같은 에러Variable used in lambda expression should be final or effectively final가 발생하는데, 이는 람다 캡처링 Lambda Capturing 때문이다.

위와 같은 메모리 구조에서 람다식을 작성하게 되면 아래와 같이 람다 스택을 캡쳐링 하게 되는데,

캡쳐링은 Call by Reference 가 아닌 Call by Value로 일어난다.

따라서, Call by Value로 캡쳐링 된 람다 스택 내 변수를 수정하는 것은 컴파일 오류를 발생시키게 된다.
람다 외부 변수는 참조만 가능하다!


추가적으로, 위와 같이 람다 내부에서 람다 외부 컬렉션을 조작(?) 하는 경우는 별다른 에러가 발생하지 않는데,
컬렉션의 경우 데이터가 Stack이 아닌 Heap 에 저장되어있기 때문이다!

profile
BE Developer

0개의 댓글