[공부정리] Variable used in lambda expression should be final or effectively final

jeyong·2024년 3월 10일
0

공부 / 생각 정리  

목록 보기
43/120
post-custom-banner


이번 게시글에서는 "Variable used in lambda expression should be final or effectively final" 오류를 다루어보면서 공부한 내용을 간단하게 작성하겠다.

1. 오류 설명

Java에서 람다 표현식을 사용할 때 가끔 "Variable used in lambda expression should be final or effectively final"를 볼 수 있다. 이 오류는 람다 표현식 내에서 사용되는 변수는 반드시 최종(final)이거나 사실상 최종(effectively final)이어야 함을 알려준다.

참고로, 변수가 effectively final이라는 것은 코드상에서 해당 변수에 대한 재할당이 일어나지 않음을 의미한다. 즉, 명시적으로 final 키워드를 사용하지 않아도, 변수의 값이 초기 할당 이후 변경되지 않으면 자바 컴파일러는 이를 effectively final로 취급한다.

2. 오류 이유

  • 람다 표현식에서 외부 변수를 참조하는 경우, 해당 변수는 람다가 실행되는 시점에서 변경되지 않아야 하는데, 이는 람다 표현식이 실행될 때 외부 메소드의 스택에 있던 데이터를 복사하여 람다 자체의 스택으로 가져오기 때문이다. 즉, 람다 표현식이 실행될 당시의 변수 상태를 '스냅샷'으로 취급한다.
  • 그래서 기본형(primitive type) 변수를 람다 내부에서 변경하려고 하면, 원본 메소드 스택의 변수에 대한 변경을 반영할 방법이 없다.

자세한 내용은 아래 게시글을 추천한다.

람다 캡처링 :: Variable used in lambda expression should be final or effectively final의 이유

profile
노를 젓다 보면 언젠가는 물이 들어오겠지.
post-custom-banner

0개의 댓글