Java

λžŒλ‹€ Lambda

쑰밈밍 2022. 4. 11. 13:27

πŸ’‘ λžŒλ‹€ Lambda

: μ½”λ“œμ˜ 양이 쀄어듀고 읽기 쉽닀

== 읡λͺ… ν•¨μˆ˜ Anonymous functions

πŸ“ŒμΈν„°νŽ˜μ΄μŠ€μ˜ λ©”μ„œλ“œκ°€ 1개 이상이면 λžŒλ‹€ν•¨μˆ˜ μ‚¬μš©ν•  수 μ—†λ‹€

-> @FunctionalInterface λŠ” λ‘λ²ˆμ§Έ λ©”μ„œλ“œλ₯Ό ν—ˆμš©ν•˜μ§€ μ•ŠλŠ”λ‹€ : μ–΄λ…Έν…Œμ΄μ…˜ μ‚¬μš©

μ‚¬μš© μ „

 

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 좜λ ₯
    }
}

μ‚¬μš© ν›„

@FunctionalInterface
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);
    }
}

* int a, int bλŠ” sum ν•¨μˆ˜μ˜ μž…λ ₯ν•­λͺ© -> a+bκ°€ 리턴값에 ν•΄λ‹Ήν•œλ‹€

* MyCalculator와 같은 μ‹€μ œ 클래슀 없이도 Calculator 객체λ₯Ό 생성할 수 μžˆλ‹€

 

πŸ’‘ λžŒλ‹€ μΆ•μ•½

: μΈν„°νŽ˜μ΄μŠ€μ— 이미 μž…μΆœλ ₯에 λŒ€ν•œ νƒ€μž…μ΄ μ •μ˜λ˜μ–΄ μžˆμœΌλ―€λ‘œ μž…λ ₯κ°’μ˜ νƒ€μž…μΈ intλŠ” μƒλž΅κ°€λŠ₯

-> (a, b) -> a+b == Integer.sum(int a, int b) => Integer::sum

 

πŸ’‘ λžŒλ‹€ ν•¨μˆ˜ μΈν„°νŽ˜μ΄μŠ€

πŸ”Ž BiFunction μΈν„°νŽ˜μ΄μŠ€ μ‚¬μš©

import java.util.function.BiFunction;

public class Sample {
    public static void main(String[] args) {
        BiFunction<Integer, Integer, Integer> mc = (a, b) -> a + b;
        int result = mc.apply(3, 4);  // sum이 μ•„λ‹Œ apply λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•΄μ•Ό ν•œλ‹€.
        System.out.println(result);  // 7 좜λ ₯
    }
}

* BiFunction<Integer, Integer, Integer> μˆœμ„œλŒ€λ‘œ μž…λ ₯ν•­λͺ© 2개, 좜λ ₯ν•­λͺ© 1개 의미

 

πŸ”Ž BinaryOperator

: μž…μΆœλ ₯ ν•­λͺ©μ΄ λͺ¨λ‘ 동일할 경우

import java.util.function.BinaryOperator;

public class Sample {
    public static void main(String[] args) {
        BinaryOperator<Integer> mc = (a, b) -> a + b;
        int result = mc.apply(3, 4);
        System.out.println(result);  // 7 좜λ ₯
    }
}