Java의 고전 책인 "Effective Java"와 "Java Concurrency in Practice"에서 마스터는 변수 참조 누출이라고도 하는 익명 함수의 변수 참조가 스레드 안전 문제로 이어질 수 있다고 언급했습니다. 따라서 Java8 이전에는 함수를 참조하려면 익명 클래스 내부의 지역 변수는 final, 즉 불변 객체로 선언되어야 합니다.
Java8은 여기에 구문 설탕을 추가합니다. 람다 표현식과 익명 클래스 내에서 지역 변수가 참조되면 직접 최종 변수로 처리됩니다.
이 코드를 리팩터링하는 것이 좋습니다. 람다를 사용하여 값을 반환하고 이를 외부 변수에 할당하세요.
람다 표현식의 totalPrice는 최종 유형이어야 하며 초기화 후에는 최종 유형을 변경할 수 없으므로 다시 totalPrice에 값을 할당하면 오류가 발생합니다. 따라서 값을 totalPrice에 다시 복사하는 대신 변수를 다시 정의하여 새 값을 저장해야 합니다. 변수를 변경할 수 없는 경우 람다 식을 사용하지 마세요.
Java의 고전 책인 "Effective Java"와 "Java Concurrency in Practice"에서 마스터는 변수 참조 누출이라고도 하는 익명 함수의 변수 참조가 스레드 안전 문제로 이어질 수 있다고 언급했습니다. 따라서 Java8 이전에는 함수를 참조하려면 익명 클래스 내부의 지역 변수는 final, 즉 불변 객체로 선언되어야 합니다.
Java8은 여기에 구문 설탕을 추가합니다. 람다 표현식과 익명 클래스 내에서 지역 변수가 참조되면 직접 최종 변수로 처리됩니다.
이 코드를 리팩터링하는 것이 좋습니다. 람다를 사용하여 값을 반환하고 이를 외부 변수에 할당하세요.
람다 표현식의 totalPrice는 최종 유형이어야 하며 초기화 후에는 최종 유형을 변경할 수 없으므로 다시 totalPrice에 값을 할당하면 오류가 발생합니다. 따라서 값을 totalPrice에 다시 복사하는 대신 변수를 다시 정의하여 새 값을 저장해야 합니다. 변수를 변경할 수 없는 경우 람다 식을 사용하지 마세요.
Final은 물론 불변입니다. 변경해야 한다면 람다를 사용하지 마세요. 람다를 사용한다면 값을 수정하지 마세요