Day15 - jeremy0405/Codesquad_CS GitHub Wiki
λ―Έμ
μ μ§ννλ©΄μ Function ν΄λμ€λ₯Ό μ§μ μ€κ³νλλ° μ μλ³μμ κ°μ μ°Έμ‘°ν΄μΌ νλ μΌμ΄ μκ²Όλ€. λ°λΌμ μμν¨μλ₯Ό λ§μ‘±νκΈ° μν΄μ final ν€μλλ₯Ό μ μΈνκ³ μ¬μ©νλ©΄ λκ² μ§λΌκ³ μκ°νκ³ μ μλ³μλ₯Ό finalλ‘ μ μΈνλλ μλ¬κ° λ¬μλ€. μλ¬λ₯Ό ν΄κ²°νκΈ° μν΄μ κ·Έλ₯ μ μλ³μλ₯Ό Function ν΄λμ€μ λ§€κ°λ³μ (INPUT)μΌλ‘ λ£μ΄μ ν΄κ²°νλλ° λ
Έλ¦¬
μ BC
κ° νμ΄νλ‘κ·Έλλ°μ νλ κ²μ ꡬ경νλ€κ° μ΄ λμ μ½λμμλ λμ λκ°μ΄ μ΄λ° μλ¬λ₯Ό λ°μμν¨ κ²μ 보μλ€. λλ λΉμ ν¨μμ μ€μ½νλλ¬Έμ μλ¬κ° λλ κ² κ°λ€κ³ μ€λͺ
ν΄μ£Όκ³ λμ΄κ°μλλ° μ€κ³Ό λ°λ¬κ° μ΄ λΆλΆμ λν΄ μ°Ύμλ΄μ£Όμκ³ μ 리λ₯Ό ν΄μ£Όμ
μ μ΄ λΆλΆμ λν΄μ λλ λ΄ λλ¦λλ‘ μ 리λ₯Ό ν΄λ³΄λ €κ³ νλ€.
public class App {
private final number;
public App(int number) {
this.number = number;
}
Predicate<Integer> lambda = (n) -> number % n == 0;
public void foo() {
Predicate<Integer> local = (n) -> number % n ==0;
}
}
lambda
μμλ numberμ μλ¬κ° λ°μνκ³
local
μμλ numberμ μλ¬κ° λ°μνμ§ μλλ€.
λλ λ¨μν λ³μμ μ€μ½νκ° local
μμλ foo()
λ©μλμ΄κΈ° λλ¬Έμ local
μ number
λ νμ μ μλ³μκ° κ°μ΄ ν λΉλ μ΄νμ μ¬μ©λλκΉ μλ¬κ° λ°μνμ§ μλλ€κ³ μκ°νλ€.
κ·Έλ°λ° lambda
λ νμ number
κ° κ°μ΄ ν λΉλ μ΄νμ μ¬μ©λλ€. νμ§λ§ μ»΄νμΌ μλ¬κ° λ°μνλλ° μ΄λ ν¨μμ μ€μ½νκ° App Classμ΄κΈ° λλ¬Έ(lexical scopeκ·μΉμ κ°μ)μ΄λ€. μ΄μ κ΄λ ¨ν΄ λ§μ€ν°μ¦ λ©€λ² Kκ° λ¨κ²¨μ£Όμ λ§ν¬
λλ μ¬κΈ°κΉμ§λ§ μκ°νκ³ λμ΄κ°μλλ° λ°λ¬λ ν λ¨κ³ λ κ³ λ―Όνλ κ² κ°λ€. (λλ¨νλ€..)
λ°λ¬λ μλμ κ°μ΄ μ΅λͺ ν΄λμ€λ‘ μ μλ₯Ό νμ μμ μ»΄νμΌ μλ¬κ° λ°μνλμ§ νμΈνλ κ² κ°λ€. λ¬Όλ‘ μλ¬λ λ°μνμ§ μλλ€. (anonymousμ test()μ ν¨μμ μ€μ½νκ° App Class λ μ’κΈ° λλ¬Έμ νμ μ΄κΈ°ν λ μ΄νμ μ¬μ©μ΄ λλκΉ)
public class App {
private final number;
public App(int number) {
this.number = number;
}
Predicate<Integer> anonymous = new Predicate<Integer>() {
@Override
public boolean test(Integer n) {
return number % n == 0;
}
}
Predicate<Integer> lambda = (n) -> number % n == 0;
public void foo() {
Predicate<Integer> local = (n) -> number % n ==0;
}
}
μ΄ μ£Όμ μ λν΄ μ΅λͺ μ λ§μ€ν°μ¦ λ©€λ²κ° λ¨κΈ΄ μ 리 κΈ