람다
- 익명 함수
- 함수를 하나의 식으로 표현한 것이다.
- 불필요한 코드를 줄이고 가독성을 높일 수 있다.
// 람다 방식
(매개변수, ... ) -> { 실행문 ... }
// 예시
() -> "Hello World!";
함수형 인터페이스
- 1개의 추상 메서드를 갖는 인터페이스를 의미한다.
- java 8부터는 인터페이스에 구현체가 있는 default method, static method를 추가할 수 있는데, 여러 default method, static method가 있더라도 추상 메서드가 오직 하나인 경우를 함수형 인터페이스라고 한다.
- lambda 표현식은 함수형 인터페이스로만 사용 가능하다.
- @FunctionalInterface 애노테이션은 해당 인터페이스가 함수형 인터페이스 조건에 맞는지 검사한다.
@FunctionalInterface
interface CustomInterface<T> {
T myCall();
default void printDefault() {
System.out.println("Hello Default");
}
static void printStatic() {
System.out.println("Hello Static");
}
}
public class Main {
public static void main(String[] args) {
CustomInterface<String> customInterface = () -> "asdf";
System.out.println((customInterface.myCall()));
}
}
CustomInterface가 함수형 인터페이스이기 때문에(추상메서드가 하나만 존재하기 때문에) 람다식으로 사용할 수 있는 것이다.
앞의 포스트에서 Optional의 orElseGet에서 람다 표현식을 통해 리팩토링했었다.
여기서 orElseGet에 커서를 대면 다음과 같이 java.util.function.Supplier가 뜬다.
이를 클릭하면 다음과 같이 Supplier가 함수형 인터페이스라는 것이 나온다.
그렇기 때문에 우리가 람다식으로 사용할 수 있었던 것이다.
참고
https://bcp0109.tistory.com/313
Java 8 함수형 인터페이스 (Functional Interface)
Overview 함수형 인터페이스란 1 개의 추상 메소드를 갖는 인터페이스를 말합니다. Java8 부터 인터페이스는 기본 구현체를 포함한 디폴트 메서드 (default method) 를 포함할 수 있습니다. 여러 개의 디
bcp0109.tistory.com
'개발 > Java' 카테고리의 다른 글
[리팩토링] Optional과 orElseGet 그리고 함수형 인터페이스 (0) | 2023.08.16 |
---|---|
String, StringBuilder, StringBuffer, CharSequence 이해하기 (0) | 2023.08.06 |
Wrapper Class: int와 Integer (0) | 2023.07.09 |
댓글