아래 코드만 알면 될듯.!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public class LamdaStudy {
    public static void main(String args[]) {
        // 함수형 인터페이스에 선언된 메쏘드의 파라미터 갯수만 맞추면 된다.(파라미터 이름까지 맞출 필요 없다.)
        // 오직 return 의 연산만 사용되면 대괄호{}의 사용 없이 retrun 문자도 생략 가능하다.
        LamdaInterface lamdaInterface = (a, b) -> a + b;
        callTest(lamdaInterface);
        
        // 대괄호 사용시에는 추가 행위를 넣을 수 있으며, return 문자 필수.
        callTest((c, d) -> {
            System.out.println("첫번째 인자 : " + c);
            System.out.println("두번째 인자 : " + d);
            return c + d;
        });        
    }
 
    public static void callTest(LamdaInterface lamdaInterface) {
        System.out.println(lamdaInterface.LamdaInterfaceMethod(5090));
    }
}
 
@FunctionalInterface
interface LamdaInterface {
    int LamdaInterfaceMethod(int num1, int num2);
 
    // 1. 어노테이션 달자.
    // 2. 함수형 인터페이스에서는 무조건 메쏘드는 1개만 선언해야 함.
    // 2-1. 메쏘드의 파라미터 이름은 사실상 상관없다.
}
cs

부연설명 : 6라인과 9라인을 보자. 6라인에서는 함수형 변수인자를 파라미터로 넘겼고, 9라인은 람다표현식으로 구현하며 넘김. 

왜 이걸 알아야 하냐? 스트림의 메쏘드의 인자들이 다 함수형 인터페이스고, 위와 같은 람다표현식으로 필요할때 그때그때 선언하며 써먹기(선언형 프로그래밍) 때문임.

  • 꼭 알아야 할것
    • 정확히 말하면 인터페이스에서 선언되는 메쏘드는 absract를 써주지 않아도 자동으로 abstract인것이다. 함수형 인터페이스에서는 abstract 메쏘드가 딱 1개여야 한다. 그외 static 이나 default 메쏘드도 같이 존재할 수 있다. (자바 Function 인터페이스 코드 참조해보면 됨.)

끝.

'IT > 자바8-람다' 카테고리의 다른 글

람다 원리 및 값 캡쳐란?  (0) 2020.05.07
클로져(Closure, Close-over), 쉐도잉  (0) 2020.05.06
Identity 함수?  (0) 2020.04.29
자주쓰는 람다  (0) 2020.04.29
First Class Citizen이란?  (0) 2020.04.23

+ Recent posts