λλ€μ λ³μ λ²μ
λ¬Όλ‘ μμ μ½λλ λ―Έμ
μ μν΄ μΌλ¨ ꡬνλ§μ λͺ©μ μΌλ‘ λ§μ 리ν©ν λ§μ΄ νμνλ μ°Έκ³ π₯²
λ―Έμ
μ μ§ννλ€κ° for λ¬Έ λ΄μ streamμ μ°κ² λμλλ°, iμ κ°μ λλ€μ λ΄μμ μ¬μ©νλ €λ μ»΄νμΌ μλ¬κ° λ¬λ€.
βVariable used in lambda expression should be final or effectively finalβ
μ¦ λλ€μμμ μ¬μ©λλ λ³μλ finalμ΄κ±°λ effectively finalμ΄μ΄μΌ νλ€.
effectively finalμ 무μμ΄λ©°, λλ€μ λ³μ λ²μλ₯Ό μ νν μ§κ³ λμ΄κ°μ.
λλ€μ λ³μ λ²μ
λ€μκ³Ό κ°μ Lambda ν΄λμ€κ° μκ³ , κ°κ°μ λ©μλλ₯Ό νΈμΆν΄ ν΄λμ€ νλμΈ iκ° μ΄λ»κ² λ°λλμ§ μ΄ν΄λ³Έλ€ π
public class Lambda {
private int i = 1;
public Integer example1() {
Supplier<Integer> function = () -> i * 5;
return function.get();
}
public Integer example2(int i) {
Supplier<Integer> function = () -> i * 10;
return function.get();
}
public Integer example3() {
int i = 1;
Supplier<Integer> function = () -> i * 15;
return function.get();
}
}
μ΄μ λν μΆλ ₯ κ²°κ³Όλ λ€μκ³Ό κ°λ€.
μ μμ μμ λλ€μμμλ μμ μ κ°μΌ λ©μλλ ν΄λμ€μ μν λ³μμ μ κ·Όμ ν μ μλ€.
μμ λ λλ€μ νλΌλ―Έν°λ‘ λκ²¨μ§ λ³μκ° μλ μΈλΆμμ μ μλ λ³μλ₯Ό μ¬μ©νκ³ μλλ° μ΄λ¬ν λ³μλ₯Ό μμ λ³μλΌκ³ λΆλ₯Έλ€.
κ·Έλ λ€λ©΄ λ€μ 맨 μ²μ μ€λ₯λ₯Ό κ°μ Έμμ β¦
μ΄ λΆλΆμμ μ μμ λ³μμΈ iλ₯Ό finalμ΄λ effectvely finalλ‘ μ μΈνλΌλ κ²μΌκΉ ?
λ¨Όμ μ§μ λ³μλ JVMμμ μ€ν μμμ μ μ₯μ΄ λλ€.
κ·Έλ¦¬κ³ μ€μ λ©λͺ¨λ¦¬μ λ€λ₯΄κ² JVMμμ μ΄ μ€ν μμμ μ€λ λ λ§λ€ λ³λμ μ€νμ΄ μμ±λλ€.
λ°λΌμ μ§μ λ³μλ ν μ€λ λ μμμλ§ μ¬μ©μ΄ λλ©°, μ€λ λλΌλ¦¬ 곡μ νμ§ λͺ»νλ€.
μ°Έκ³ λ‘ μ§μ λ³μμ λ€λ₯΄κ² μΈμ€ν΄μ€ λ³μλ ν μμμ μμ±λμ΄ μλ‘ λ€λ₯Έ μ€λ λλΌλ¦¬λ 곡μ ν μ μλ 곡μ λ³μμ΄λ€.
λλ€λ κ°κ° λ³λμ μ€λ λμμ μ€νμ΄ κ°λ₯νλ€.
λλ€κ° μ§μ λ³μμ μ κ·Όνλ € ν λμλ μ§μ λ³μκ° μ‘΄μ¬νλ μ€ν μμμ μ§μ μ κ·Όνμ§ μκ³ μ΄ λ³μμ 볡μ¬λ³Έμ λ§λ€μ΄ λμνλ€. μ΄λ₯Ό λλ€ μΊ‘μ²λ§μ΄λΌκ³ νλ€.
λλ¬Έμ μ΄ λ³΅μ¬λ³Έμ κ°μ§κ³ λμν μμ μΈλ°, λ°νλ λλ€μμ μ¬λ¬ μ€λ λμμ λμν μ μκΈ° λλ¬Έμ λκΈ°ν λ¬Έμ κ° μΌμ΄λ μ μλ€.
λλ¬Έμ μ΄ λ³΅μ¬λ³Έ κ°μ΄ λ°λμ΄ λ²λ¦¬λ©΄ μλνμ§ μμ κ²°κ³Όκ° μκΈΈ μ μμΌλ―λ‘ μ»΄νμΌ λ¨κ³μμ
final λλ effectively finalλ‘ μ μΈν΄ λ³μλ₯Ό μ λ’°ν μ μκ² λ§λλ κ²μ΄λ€.
μ΄λ₯Ό λλ€ μΊ‘μ²λ§μ΄λΌκ³ νλ€.
μ λ¬Έμ μμ μ»΄νμΌ μλ¬κ° λ¨λ κ²μ iκ° μ€μ½ν λ°μ μμ΄ κ°μ΄ λ³ν μ μμ΄ μ λ’°ν μ μλ€.
λλ¬Έμ μΈν
리μ μ΄κ° κΆν΄μ£Όλ λ°©λ²μ μ°λ©΄ iλ₯Ό μ€μ½ν μ λ³μμ μλ‘ ν λΉν΄μ μ¬μ©νκ² λλ€.
μ¬κΈ°μ iλ final
λ‘ μ μΈλμ§λ μμμ§λ§, μλ° 8μμ μΆκ°λ effectively finalλ‘ μ μΈλ κ²μ΄λ€.
effectively finalμ finalλ‘ μ μΈλμ§ μμλ μ»΄νμΌλ¬κ° ν΄λΉ λ³μκ° λ³κ²½λμ§ μμλ€κ³ νλ¨ν μ μλ€.
λ§μ½ effectively finalμΈ iμ κ°μ λ°κΎΈλ € νλ€λ©΄ μ΄λ κ² μ»΄νμΌ μ€λ₯κ° λ°μνλ€.
νλ νλ λμλ λλ€μ μΈκ³ π€ΈββοΈ