week9_incheol_2 - GANGNAM-JAVA/JAVA-STUDY GitHub Wiki

λžŒλ‹€ & ν΄λ‘œμ €λž€ 무엇인가?

λžŒλ‹€

읡λͺ… 클래슀λ₯Ό 더 κ°„λž΅ν•˜κ²Œ μ‚¬μš©ν•  수 μžˆλ„λ‘ ν•˜μ—¬ ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ„ ν• μˆ˜ μžˆλ„λ‘ λ„μ™€μ£ΌλŠ” κΈ°λŠ₯이닀.

ν΄λ‘œμ €

closureλž€ λ‹€λ₯Έ ν•¨μˆ˜μ˜ scope λ³€μˆ˜μ— μ ‘κ·Όν•  수 μžˆλŠ” ν•¨μˆ˜λ₯Ό μ˜λ―Έν•œλ‹€.

νŠΉμ΄ν•œ 점은 μ™ΈλΆ€ ν•¨μˆ˜κ°€ μ’…λ£Œ λ˜λ”λΌλ„ 이 값이 μœ μ§€ λœλ‹€. λŒ€μ‹  μ™ΈλΆ€μ˜ λ³€μˆ˜λŠ” λ³€ν•˜μ§€ μ•ŠλŠ” final λ³€μˆ˜μ΄μ–΄μ•Ό ν•œλ‹€. μžλ°” 7κΉŒμ§€λŠ” λͺ…μ‹œμ μœΌλ‘œ final을 λΆ™μ—¬ μ£Όμ—ˆμ§€λ§Œ μžλ°” 8λΆ€ν„°λŠ” final을 뢙이지 μ•Šμ•„λ„ λ³€κ²½λ˜μ§€λ§Œ μ•ŠλŠ”λ‹€λ©΄ κ²½κ³  문ꡬλ₯Ό 보내주지 μ•ŠλŠ”λ‹€.

private String someVariable = "9000";

public void anonymousClosure() {
  String someVariable = "1000";
  Function<String, Integer> function = new Function<String, Integer>() {
    @Override
    public Integer apply(String s) {
      return Integer.parseInt(ClosureExample.this.someVariable);
    }
  };
}
public void lambdaClosure() {
  String someVariable = "1000";
  Function<String,Integer> function = i -> Integer.parseInt(this.someVariable);
}

λžŒλ‹€μ˜ κ²½μš°μ—λŠ” ν˜ΈμΆœν•œ ν΄λž˜μŠ€μ— 접근이 κ°€λŠ₯ν•˜μ§€λ§Œ 읡λͺ… ν΄λž˜μŠ€λŠ” 읡λͺ… ν΄λž˜μŠ€λ‚΄μ—μ„œλ§Œ 접근이 κ°€λŠ₯ν•˜λ‹€. 이게 anonymous ν΄λž˜μŠ€μ™€ lambda의 차이점이라고 ν•  수 μžˆκ² λ‹€.

public void anonymousClosure() {
  Function<String, Integer> function = new Function<String, Integer>() {
    @Override
    public Integer apply(String s) {
      System.out.println(toString("toString")); // 컴파일 μ—λŸ¬!!!!
      return null;
    }
  };
}
public void lambdaClosure() {
  Function<String,Integer> function = i -> {
    System.out.println(toString("toString"));
    return null;
  };
}

public String toString(String str){
  return str;
}