- 추상메소드를 딱 하나만 가지고 있는 인터페이스
- @FunctionalInterface 어노테이션을 붙여서 명시해 줄 수 있다. 이 어노테이션이 붙으면 메소드가 2개 이상일 경우 컴파일에러 발생.
위 어노테이션이 없더라도 추상메서드 하나라면 함수형 인터페이스!
(args) -> { body }
인자리스트
- args가 없을때 : ()
- args 한개일 때 : (arg) or arg
- args 여러개 일 때 : (args1, args2, ...)
바디
- 화살표 오른쪽에 함수 본문을 정의한다.
- 여러 줄인 경우에 {}을 묶어서 사용한다.
- 한 줄인 경우에 {} 생략 가능, return도 생략 가능.
익명 클래스 구현체와 달리 '쉐도윙'하지 않는다.
- 익명 클래스는 새로 스콥을 만들지만, 람다는 람다를 감싸고 있는 스콥과 같다.
Runnable은 함수형인터페이스다.
기존 사용방법.Runnable runnable = new Runnable() { @Override public void run() { System.out.println("run 호출"); } }; runnable.run();
람다식을 이용한 방법
Runnable runnable = () -> System.out.println("run 호출"); runnable.run();
이처럼 간단하게 표현할 수 있다.
- T타입을 받아서 R타입을 리턴하는 함수형 인터페이스. 추상메소드 apply() 를 가진다.
- 함수조합용 메소드로 compose, andThen을 가진다.
- andThen(Function<? super R,? extends V> after) : input 을 받아 함수를 수행한 후 그 결과값을 after 함수의 input 으로 넣어 수행하는 합성함수를 return
- compose(Function<? super V,? extends T> before) : input 으로 받은 값으로 before 함수를 수행한 후 그 결과값 input으로 받아 수행하는 합성함수를 return
- 두개의 값 T,U를 받아서 R타입을 리턴하는 함수형 인터페이스. apply()를 가진다.
- T타입을 받아 Boolean을 리턴하는 함수형 인터페이스. 추상메소드 test()를 가진다.
- T타입을 받고 리턴타입이 없다, 즉 void의 형태를 가지는 함수형 인터페이스. 추상메소드 accept()를 가진다.
- 파라미터가 없고 R타입을 리턴하는 함수형 인터페이스. 추상메소드 get()을 가진다.