1. 기본 문법
- 람다는 인터페이스로 만듭니다.
익명 함수(Anonymous Function)를 간단하게 표현할 수 있도록 합니다.
- 인터페이스에는 메서드가 하나만 존재해야 합니다.
- 메서드가 인터페이스를 매개변수로 받고 있으면 행위(behavior)를 줘야 합니다.
- 람다에서 매개변수에 타입을 생략 가능합니다.
- @FunctionalInterface 표시 가능합니다.
- @FunctionalInterface는 함수형 인터페이스를 정의할 때 사용됩니다.
- 함수형 인터페이스는 단 하나의 추상 메서드를 가지는 인터페이스로, 람다 표현식으로 인스턴스를 생성할 수 있습니다.
2. 주요 함수형 인터페이스
(1) Consumer<T>
- 인자를 받아 처리하고 결과를 반환하지 않는 함수
// 입력(매개 변수)만 받고 출력이 없는 연산을 수행합니다.
public interface MyConsumer<T> {
void accept(T data);
}
MyConsumer<Integer> r1 = (data) -> {
System.out.println("소비할 데이터 : " + data);
};
r1.accept(1); // 소비할 데이터 : 1
(2) Supplier<T>
- 인자를 받지 않고 값을 반환하는 함수
// 입력 없이 값을 반환(return)
@FunctionalInterface
public interface MySupplier<T> {
T get();
}
MySupplier<String> r2 = () -> { return "good"; };
MySupplier<String> r3 = () -> "good"; // return 생략 가능
String msg = r3.get();
System.out.println(msg); // good
(3) Function<T, R>
- 인자를 받아 다른 타입의 결과를 반환하는 함수
// 입력을 받아서 결과를 반환 (매개변수도 있고 반환값도 있다)
public interface MyFunction<T, R> {
R apply(T t);
}
MyFunction<String, Integer> r4 = (s) -> s.length();
Integer size = r4.apply("Lambda");
System.out.println(size); // 6
(4) Predicate<T>
- 인자를 받아 boolean 값을 반환하는 함수
// 입력을 받아 논리값을 반환
public interface MyPredicate<T> {
boolean apply(T t);
}
MyPredicate<String> r5 = (s) -> s.length() < 10;
Boolean b = r5.apply("Lambda");
System.out.println(b); // true
Share article