λλ€μμ΄λ
- **μ΅λͺ
ν¨μ(Anonymous function)**μ μμ±νκΈ° μν μ
- κ°μ²΄ μ§ν₯ μΈμ΄λ³΄λ€λ ν¨μ μ§ν₯ μΈμ΄μ κ°κΉμ
- μ μ¬μ©νλ©΄ μ½λκ° κ°κ²°ν΄μ§κ³ , 컬λ μ
μ μμλ₯Ό νν°λ§νκ±°λ λ§€ννκΈ° μ½λ€
- λ§€κ° λ³μλ₯Ό κ°μ§ μ½λ λΈλ‘μ νν
- λ°νμ μμ μ΅λͺ
ꡬν κ°μ²΄λ₯Ό μμ±
- μ΄λ€ μΈν°νμ΄μ€λ₯Ό ꡬνν μ§λ λμ
λλ μΈν°νμ΄μ€κ° 무μμ΄λμ λ°λΌ κ²°μ
Runnable runnable = new Runnable() {
public void run() {...};
};
Runnable runnable = () -> {...};
κΈ°λ³Έ λ¬Έλ²
(int a) -> {System.out.println(a)};
(a) -> {System.out.println(a)};
a -> System.out.println(a);
(x, y) -> {return x + y};
(x, y) -> x + y;
νκ² νμ
κ³Ό ν¨μν μΈν°νμ΄μ€
- λλ€μμ λ¨μ λ©μλλ₯Ό μ μΈνλ κ²μ΄ μλ, λ©μλλ₯Ό κ°μ§κ³ μλ κ°μ²΄λ₯Ό μμ±
- λλ€μμ μΈν°νμ΄μ€μ μ΅λͺ
ꡬν κ°μ²΄λ₯Ό μμ±
- λλ€μμ΄ λμ
λ μΈν°νμ΄μ€λ₯Ό λλ€μμ νκ² νμ
(target type)μ΄λΌκ³ ν¨
@FuntionalInterface
- μΈν°νμ΄μ€κ° λλ€μμ μ΄μ©ν΄ ꡬν κ°μ²΄λ₯Ό μμ±νλ €λ©΄ νλμ μΆμ λ©μλλ§μ μ μν΄μΌ ν¨
- μ΄ μ‘°κ±΄μ λ§μ‘±νλ μΈν°νμ΄μ€λ₯Ό ν¨μν μΈν°νμ΄μ€λΌκ³ ν¨
@FunctionalInterface
public interface Example {
public void method1();
public void method2();
}
λ§€κ° λ³μμ 리ν΄κ°μ΄ μλ λλ€μ
@FunctionalInterface
public interface Example {
public void method();
}
public class Main {
public static void main(String[] args) {
Example e;
e = () -> {
String str = "1";
System.out.println(str);
};
e.method();
e = () -> { System.out.println("2")};
e.method();
e = () -> System.out.println("3");
e.method();
}
}
λ§€κ° λ³μκ° μλ λλ€μ
@FunctionalInterface
public interface Example {
public void method(int x);
}
public class Main {
public static void main(String[] args) {
Example e;
e = (x) -> {
int result = x * 5;
System.out.println(result);
};
e.method(1);
e = (x) -> { System.out.println(x * 5)};
e.method(2);
e = x -> System.out.println(x * 5);
e.method(3);
}
}
λ¦¬ν΄ κ°μ΄ μλ λλ€μ
@FunctionalInterface
public interface Example {
public int method(int x, int y);
}
public class Main {
public static void main(String[] args) {
Example e;
e = (x, y) -> {
int result = x * y;
return result;
};
System.out.println(e.method(1, 2));
e = (x, y) -> { return x * y};
System.out.println(e.method(1, 2));
e = (x, y) -> x * y;
System.out.println(e.method(1, 2));
e = (x, y) -> multiply(x, y);
System.out.println(e.method(1, 2));
}
public static int multiply(int x, int y) {
return x * y;
}
}
@FunctionalInterface
public interface Example {
public int method(int x, int y);
}
public class Main {
public static void main(String[] args) {
Example e;
e = (x, y) -> {
int result = x * y;
return result;
};
System.out.println(e.method(1, 2));
e = (x) -> { return x * y};
System.out.println(e.method(1, 2));
e = x -> x * y;
System.out.println(e.method(1, 2));
}
}
ν΄λμ€ λ©€λ²μ λ‘컬 λ³μ μ¬μ©
ν΄λμ€μ λ©€λ² μ¬μ©
- ν΄λμ€μ νλμ λ©μλλ₯Ό μ μ½μμ΄ μ¬μ©ν μ μλ€
- λ€λ§, λλ€μμμμ thisλ λ΄λΆμ μΌλ‘ μμ±λλ μ΅λͺ
κ°μ²΄μ μ°Έμ‘°κ° μλλΌ λλ€μμ μ€νν κ°μ²΄μ μ°Έμ‘°
@FunctionalInterface
public interface FInterface {
public void method();
}
public class ThisExample{
public int outterField = 10;
class Inner {
int innerField = 20;
void foo() {
FInterfce test = () -> {
System.out.println("outterField: " + outterField);
System.out.println("outterField: " + ThisExample.this.outterField);
System.out.println("outterField: " + innerField);
System.out.println("outterField: " + this.innerField);
};
test.method();
}
}
}
public class Main {
public static void main(String[] args) {
ThisExample example = new ThisExample();
ThisExample.Inner inner = example.new Inner();
inner.foo();
}
}
λ‘컬 λ³μ μ¬μ©
- λλ€μμμ λ°κΉ₯ ν΄λμ€μ νλλ λ©μλλ μ ν μμ΄ μ¬μ©ν μ μμΌλ, λ©μλμ λ§€κ° λ³μ λλ λ‘컬 λ³μλ₯Ό μ¬μ©νλ©΄ μ΄ λ λ³μλ final νΉμ±μ κ°μ ΈμΌ νλ€
- λ§€κ° λ³μ λλ λ‘컬 λ³μλ₯Ό λλ€μμμ μ½λ κ²μ νμ©λμ§λ§, λλ€μ λ΄λΆ λλ μΈλΆμμ λ³κ²½ λΆκ°
@FunctionalInterface
public interface FInterface {
public void method();
}
public class VariableExample{
void foo(int arg) {
int localVar = 40;
FInterface test = () -> {
System.out.println("arg: " + arg);
System.out.println("localVar: " + localVar);
};
test.method();
}
}
public class Main {
public static void main(String[] args) {
VariableExample vExample = new VariableExample();
vExample.method(20);
}
}
See Also
Oracle Java Tutorial