ποΈ Backend/Java
μλ°(Java) - λλ€(Lambda)
kongmi
2023. 2. 8. 19:02
ν¨μν νλ‘κ·Έλλ°?
μμν¨μ
- λμΌν μ λ ₯μλ νμ κ°μ κ°μ λ°νν΄μΌ νλ ν¨μ
- ν¨μμ μ€νμ΄ νλ‘κ·Έλ¨μ μ€νμ μν₯μ λ―ΈμΉμ§ μμμΌ νλ ν¨μ
- ν¨μμ λ΄λΆμμ μΈμκ°μ λ³κ²½νκ±°λ νλ‘κ·Έλ¨μ μνλ₯Ό λ³κ²½νλ Side Effectκ° μλ κ²
λΉμν, λΆλ³μ±
- ν¨μν νλ‘κ·Έλλ°μμμ λ°μ΄ν°λ λ³νμ§ μλ λΆλ³μ±μ μ μ§ν΄μΌ νλ€.
μ μΈν ν¨μ
- if, for, switchμ κ°μ 쑰건문/λ°λ³΅λ¬Έ μ¬μ© κΈμ§
1κΈ κ°μ²΄μ κ³ μ°¨ ν¨μ
- κ°μ²΄λ₯Ό λ§€κ°λ³μλ‘ μ λ¬ν μ μλ€.
λλ€(Lambda)
λλ€ ννμ μμ±
μλ°μμλ νμ΄ν(->)κΈ°νΈλ₯Ό μ¬μ©νμ¬ λλ€ ννμμ μμ±ν μ μμ΅λλ€.
- λ§€κ°λ³μμ νμ μ μΆλ‘ ν μ μλ κ²½μ°, νμ μλ΅ κ°λ₯
- λ§€κ°λ³μκ° νλμΈ κ²½μ° κ΄νΈ() μλ΅ κ°λ₯
- ν¨μμ λͺΈμ²΄κ° νλμ λͺ λ Ήλ¬Έλ§μΌλ‘ μ΄λ£¨μ΄μ§ κ²½μ°(ν μ€μΈ κ²½μ°) μ€κ΄νΈ{} μλ΅ κ°λ₯
κΈ°μ‘΄ μΈν°νμ΄μ€ ν¨μ
public abstract int add(int x, int y) {
return x + y;
}
λλ€μμΌλ‘ νν
(x, y) -> x + y;
μΆμ λ©μλλ₯Ό νλλ§ κ°λ μΈν°νμ΄μ€λ₯Ό μλ° 8 λΆν°λ ν¨μν μΈν°νμ΄μ€λΌκ³ ν©λλ€.
μ΄λ° ν¨μν μΈν°νμ΄μ€λ§μ λλ€μμΌλ‘ λ³κ²½ν μ μμ΅λλ€.
ν¨μν μΈν°νμ΄μ€ μμλ @FunctionalInterface μ΄λ Έν μ΄μ μ λΆμ¬μ€λλ€.
- λλ€μμ λ©μλ μ΄λ¦μ΄ μκ³ λ©μλλ₯Ό μ€ννλλ° νμν λ§€κ°λ³μμ λ§€κ°λ³μλ₯Ό νμ©ν μ€νμ½λλ₯Ό ꡬννλ κ²
- λλ€ ννμμ μ¬μ©ν λλ λλ€ ννμμ μ μ₯νκΈ° μν μ°Έμ‘° λ³μμ νμ μ κ²°μ ν΄μΌ ν©λλ€.
@FunctionalInterface
λ₯Ό μΈν°νμ΄μ€ μ μΈ μμ λΆμ΄λ©΄, μ»΄νμΌλ¬λ κ°λ ₯ν λ¬Έλ²μ²΄ν¬λ₯Ό ν΄μ€λλ€.
(2κ° μ΄μμ λ©μλκ° μ μΈλλ©΄ μ€λ₯ λ°μ)
μμ ) κ°μ²΄μ§ν₯ μ½λ
interface Calculator {
int sum(int a, int b);
}
class MyCalculator implements Calculator {
public int sum(int a, int b) {
return a+b;
}
}
public class Sample {
public static void main(String[] args) {
MyCalculator mc = new MyCalculator();
int result = mc.sum(3, 4);
System.out.println(result); // 7 μΆλ ₯
}
}
μμ ) λλ€λ₯Ό μ μ©ν μ½λ
interface Calculator {
int sum(int a, int b);
}
public class Sample {
public static void main(String[] args) {
Calculator mc = (int a, int b) -> a + b; // μΈν°νμ΄μ€ μμμ λ°μμ ν΄λμ€ λμ λλ€
int result = mc.sum(3, 4);
System.out.println(result);
}
}
λ©μλ μ°Έμ‘°(method reference)
- λ©μλ μ°Έμ‘°λ λ©μλλ₯Ό μ°Έμ‘°ν΄μ λ§€κ° λ³μμ μ 보 λ° λ¦¬ν΄ νμ μ μμλ΄μ΄, λΆνμν λ§€κ°λ³μλ₯Ό μ κ±°νλ κ²
μ μ λ©μλμ μΈμ€ν΄μ€ λ©μλ μ°Έμ‘°
- ν΄λμ€::λ©μλ
- μ°Έμ‘°λ³μ::λ©μλ
class Calculator {
public static int staticMethod(int x, int y) {
return x + y;
}
public int instanceMethod(int x, int y) {
return x + y;
}
}
public class Main {
public static void main(String[] args) {
IntBinaryOperator operator; // λ κ°μ int μ°μ°νλ μΈν°νμ΄μ€
// μ μ λ©μλ μ°Έμ‘°
operator = (x, y) -> Calculator.staticMethod(x,y);
System.out.println("κ²°κ³Ό 1 : " + operator.applyAsInt(1, 2)); // λ κ°μ int μ°μ°
// λ©μλ μ°Έμ‘° λ°©μ
operator = Calculator::staticMethod;
System.out.println("κ²°κ³Ό 2 : " + operator.applyAsInt(3,4));
// μΈμ€ν΄μ€ λ©μλ μ°Έμ‘°
Calculator obj = new Calculator();
operator = (x,y) -> obj.instanceMethod(x,y);
System.out.println("κ²°κ³Ό 3 : " + operator.applyAsInt(5, 6));
// λ©μλ μ°Έμ‘° λ°©μ
operator = obj::instanceMethod;
System.out.println("κ²°κ³Ό 4 : " + operator.applyAsInt(7, 8));
}
}
κ²°κ³Ό 1 : 3
κ²°κ³Ό 2 : 7
κ²°κ³Ό 3 : 11
κ²°κ³Ό 4 : 15