728x90
✏️ 함수형 인터페이스
- 함수형 인터페이스란 하나의 추상 메서드를 갖는 인터페이스를 말한다.
- 자바 8 이후부터는 함수형 인터페이스를 나타내는 @FuncionalInterface 내장 애노테이션을 사용할 수 있다.
- 이 애노테이션은 컴파일 타임에 해당 인터페이스가 함수형 인터페이스가 맞는지 검사할 때, 유용하게 사용할 수 있다.
- 함수형 인터페이스에는 하나의 추상 메서드 외에도 여러 개의 디폴트 메서드나 정적 메서드가 있을 수 있다.
- 예외적으로 java.lang.Object 클래스에 선언된 public 메서드를 오버라이딩하는 메서드는 인터페이스의 추상 메서드에 포함시키지 않는다.
@FunctionalInterface
interface MyFunctionalInterface {
void foo();
default void bark() { /*..*/ }
static void fly() { /*..*/ }
}
🗒️ 자주 사용되는 형태의 함수형 인터페이스
Function<T, R>
- T: 인수 타입, R은 반환형
- 하나의 값을 인수로 전달하면 어떤 값을 반환
- R apply(T t);
- 인수나 반환형에 기본 타입을 사용하고 싶은 경우
- public interface IntToLongFunction { long applyAsLong(int value); }
- 한개의 인수가 아닌 두개의 인수를 받고 싶을 때는 BiFunction 같이 접두사 Bi를 붙이면 된다.
- public interface BiFunction<T, U, R> { R apply(T t, U u); }
Supplier<T>
- T get();
- 결과 반환
Consumer<T>
- 어떤 인수를 받고서 아무런 결과도 반환하지 않을 때
- void accept(T t);
- BiConsumer<T, U> -> 접두사 Bi를 붙이면 두 개의 인수를 받을 수 있다.
Predicate<T>
- predicate(술어)란 인수와 관련된 어떤 조건을 검사하여 해당 조건을 만족하면 참을 반환하고, 아니면 거짓을 반환하는 메서드를 말한다.
- BiPredicate<T, U> 처럼 앞에 접두사를 붙이면 인수 두개를 받을 수 있다.
Predicate<String> isEmptyString = string -> string.length() == 0;
System.out.println(isEmptyString.test("ABC"));
System.out.println("isEmptyString.test = " + isEmptyString.test(""));
Predicate<String> isNotEmptyString = isEmptyString.negate();
System.out.println("isNotEmptyString.test(\"ABC\") = " + isNotEmptyString.test("ABC"));
System.out.println("isNotEmptyString.test(\"\") = " + isNotEmptyString.test(""));
🔎 람다식
- 람다식은 이름이 없는 익명 메서드라고 말 할 수 있으며, 조금 더 자세히 말하면 함수형 인터페이스에 있는 추상 메서드를 구현하기 위해서 사용된다고 말할 수 있다.
📌 메서드 참조 ( Method Reference )
- 기존 메서드에 대한 참조를 말하는 것으로 함수형 인터페이스를 구현하는 클래스나 람다식 대신에 메서드 참조를 사용할 수 있다.
- 람다 본체가 어떤 메서드 하나를 호출하는 것에 그친다면 메서드 참조를 동해서 축약할 수 있다.
- 메서드 참조는 함수형 인터페이스의 추상 메서드 시그니처와 호환이 되어야 한다.
사용 방법
- 정적 메서드 참조
- 클래스명::정적메서드명
- 특정 객체의 인스턴스 메서드 참조
- 특정객체::메서드명
- myApp::appendStrings2
- 특정 타입의 인스턴스 메서드 참조
- 특정타입::메서드명(인스턴스 메서드)
- String::concat
- 생성자 참조
- 클래스명::new
- HashSet::new
인용
https://blog.hexabrain.net/382
728x90
'Language > Java' 카테고리의 다른 글
메모리 구조 및 특징 (0) | 2023.05.29 |
---|---|
Comparable과 Comparator (0) | 2023.05.25 |
Generic (2) | 2023.05.24 |
열거형(enums) (0) | 2023.05.23 |
중첩 클래스 (0) | 2023.05.22 |