728x90
- 람다식은 메서드 내부에서 익명으로 생성되는 객체이므로, 해당 객체가 생성될 때 외부에서 참조하는 변수들은 반드시 final 또는 사실상 final과 동등한 효과를 가져야 한다.
- 람다식이 정의된 블록의 외부 변수를 캡처하는 방식에 기인하는데, 람다식에서 사용하는 외부 변수는 내부적으로 해당 변수를 참조하는 final 필드를 생성하게 되며, 이렇게 final 필드로 새엉된 참조 변수를 통해서만 해당 변수에 접근할 수 있다.
- 즉 람다는 내부에서 참조하는 변수가 final로 선언된 경우에만 참조할 수 있다.
- 람다식이 실행되는 시점에 해당 변수의 값이 이미 정해져 있기 때문에
- 람다식 내부에서 참조하는 변수가 변경될 가능성이 있으면 해당 변수를 final 로 선언하면 안되며,
- 다른 방법으로 값을 전달해야 하는데, 이때는 람다식 내부에서 해당 값을 변경할 수 없게된다.
- 람다식을 사용하는 메소드나 클래스의 스코프에서 변수를 정의하고 람다식에서 참조할 때 해당 변수의 라이프타임이 람다식이 실행되는 동안에만 유지되기 때문.
- 람다식에서 final 로 선언되지 않은 값은 변경이 가능하지만 이는 위험을 초래할 수 있으니, 그러지말자.
- 역시 모든 데이터는 일단 immutable 하게 가져가는게 좋은거 같다.
728x90
'Language > 자바' 카테고리의 다른 글
final 키워드를 사용하면 좋은 점. (0) | 2023.02.22 |
---|---|
자바 클로저에 대한 짧은.. (0) | 2023.02.22 |
왜 private인 필드가 변하지 않도록 하기 위해 final 키워드를 선언해야 하는가?(by.리플렉션) (0) | 2023.02.14 |
메서드 변수에 사용하는 static 키워드 (0) | 2023.02.14 |
final 키워드는 객체 참조에 어떤 영향을 미치는가? (0) | 2023.02.14 |
댓글