effectively final1 [Java] effectively final, lambda lambda식에서는 외부지역변수를 사용할땐 final이거나 effectively final 해야한다. lambda식도 함수이니 실행되는 함수와 외부지역변수를 가진 함수와 다른 쓰레드에서 동작할 가능성이 있다. 이 때 두 쓰레드 사이에 외부지역변수에 대해 완벽하게 sync를 잡아줄 방법이 없다. lambda식 입력이 같다면 그 결과도 같아야만한다.(순수함수) 일단 둘 사이의 쓰레드가 다를 때 외부지역변수의 데이터를 가진 쓰레드가 먼저 끝나 데이터가 사라질 수 있다. 그렇기에 lambda식에서는 변수를 복사하여 사용한다. (람다 캡쳐링) (클래스 변수, 인스턴스 변수는 공유 자원이니 접근 가능) 즉, 멀티쓰레딩 환경에서 정상적인 결과를 보장하기 힘들어 외부지역변수를 복사하여 사용한다. 그리고 이 복사한 값에.. 2023. 7. 25. 이전 1 다음