λλ€μμ΄λ?
λλ€μ(Lambda Expression)μ ν¨μν νλ‘κ·Έλλ° κΈ°λ²μ μ§μνλ μλ°μ λ¬Έλ² μμμ΄λ€.
λ©μλλ₯Ό νλμ μμΌλ‘ ννν κ²μΌλ‘ μ½λλ₯Ό κ°κ²°νκ³ λͺ ννκ² μμ±ν μ μλ€λ μ₯μ μ κ°λλ€.
λλ€μμμλ κΈ°λ³Έμ μΌλ‘ λ°ν νμ κ³Ό ν¨μ μ΄λ¦μ μλ΅νκΈ° λλ¬Έμ μ΅λͺ ν¨μλΌκ³ λΆλ₯΄κΈ°λ νλ€.
μ΄λ‘ μ μΌλ‘ 곡λΆνκΈ°λ³΄λ€ μ½λλ‘ λ³΄λ©΄ λ λͺ ννκ² μ΄ν΄ν μ μλ€.
// κΈ°μ‘΄ λ°©μ
int sum(int num1, int num2) {
return num1 + num2;
}
// λλ€μ
(int num1, int num2) -> {
num1 + num2
}
// λ©μλ λ°λμ μ€νλ¬Έμ΄ νλλ§ μ‘΄μ¬ν λ μ€κ΄νΈ μλ΅ κ°λ₯
(int num1, int num2) -> num1 + num2
// 맀κ°λ³μ νμ
μ μ μΆν μ μλ κ²½μ° λ§€κ°λ³μ νμ
μλ΅ κ°λ₯
(num1, num2) -> num1 + num2
ν¨μν μΈν°νμ΄μ€
ν¨μν μΈν°νμ΄μ€(Functional interface)λ 1κ°μ μΆμ λ©μλλ₯Ό κ°κ³ μλ μΈν°νμ΄μ€μ΄λ€.
μλ°μμ ν¨μλ λ°λμ ν΄λμ€ κ°μ²΄λ₯Ό λ¨Όμ μμ±ν νμ κ°μ²΄λ₯Ό ν΅ν΄ νΈμΆν΄μΌ νκΈ° λλ¬Έμ λλ€μμΌλ‘ μμ±λ ν¨μμ μ κ·Όν λ μΈν°νμ΄μ€μ μ μλ μΆμ λ©μλλ₯Ό ν΅ν΄ μ κ·Όνλ€.
public class LamdaEx {
public static void main(String[] args) {
FunctionalInterface func = (num1, num2) -> num1 + num2 //μΆμ λ©μλ λλ€μμΌλ‘ ꡬν
System.out.println(func.sum(5,10))
}
@FunctionalInterface// μ»΄νμΌλ¬κ° μΈν°νμ΄μ€κ° λ°λ₯΄κ² μ μλμλ μ§ νμΈν μ μλλ‘ νμΈνλ μ λν
μ΄μ
interface FunctionalInterface {
public abstract int sum(int num1, int num2);
}
// Output
15
λ§μ½ λ¦¬ν΄ κ°μ΄ μκ³ μ€νλ¬Έμ΄ λ μ€ μ΄μμΈ λλ€μμ κ²½μ°μ λλ€μ μ€κ΄νΈ μμ λ°λμ return λ¬Έμ΄ μμ΄μΌ νλ€.
λ©μλ μ°Έμ‘°
λλ€μμμ λΆνμν 맀κ°λ³μλ₯Ό μ κ±°ν λ μ£Όλ‘ μ¬μ©νλ λ°©λ²μ΄λ€.
κΈ°μ‘΄μ λ©μλλ₯Ό λ¨μν νΈμΆλ§ νλ κ²½μ°μ λ©μλ μ°Έμ‘°λ₯Ό μ΄μ©νλ©΄ λ κ°κ²°νκ² μ½λλ₯Ό μμ±ν μ μλ€.
μ μ λ©μλλ₯Ό μ°Έμ‘°ν κ²½μ°μλ ν΄λμ€ μ΄λ¦::λ©μλ μ΄λ¦
μΌλ‘ μ κ³ , μΈμ€ν΄μ€ λ©μλμ κ²½μ° κ°μ²΄λ₯Ό μμ±ν λ€μ μ°Έμ‘° λ³μ::λ©μλ μ΄λ¦
μΌλ‘ μμ±νλ€.
//Calculator.java
public class Calculator {
// μ μ λ©μλ
public static int staticMethod(int x, int y) {
return x + y;
}
// μΈμ€ν΄μ€ λ©μλ
public int instanceMethod(int x, int y) {
return x * y;
}
}
import java.util.function.IntBinaryOperator;
public class MethodReferences {
public static void main(String[] args) throws Exception {
IntBinaryOperator operator;
operator = Calculator::staticMethod;// λ°λ‘ λ©μλ μ΄λ¦μΌλ‘ μ κ·Ό
System.out.println("μ μ λ©μλ : " + operator.applyAsInt(2, 5));
Calculator calculator = new Calculator();// κ°μ²΄ λ¨Όμ μμ±
operator = calculator::instanceMethod;// κ°μ²΄λͺ
::λ©μλ λͺ
System.out.println("μΈμ€ν΄μ€ λ©μλ : "+ operator.applyAsInt(2, 5));
}
}
//Output
μ μ λ©μλ : 7
μΈμ€ν΄μ€ λ©μλ : 10
ν΄λμ€λͺ
::new
λ‘ μμ±μλ₯Ό μ°Έμ‘°ν μλ μλ€.
μμ±μκ° μ€λ²λ‘λ© λμ κ²½μ°μλ ν¨μν μΈν°νμ΄μ€μ μΆμ λ©μλμ κ°μ ν¨μ μκ·Έλμ²λ₯Ό κ°κ³ μλ μμ±μλ₯Ό μ°Ύμ μ€ννλ€.
'π Java' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Java] μ€λ λ(Thread) (0) | 2022.09.18 |
---|---|
[Java] μ€νΈλ¦Ό(Stream) (0) | 2022.09.17 |
[Java] 컬λ μ (Collection) (3) | 2022.09.17 |
[Java] μ λ€λ¦κ³Ό μμΈ μ²λ¦¬ (0) | 2022.09.16 |
[Java] μΆμν(Abstraction) (1) | 2022.09.07 |