람다(lambda)
- 익명 함수를 의미
- 함수형 프로그래밍을 지원하기 위해 Java8버전부터 도입
- 코드 가독성 상승을 위한 축약된 형태의 문법
람다 표현식 구조
(매개변수) -> 반환할값
입력할 값을 매개변수 란에 입력받아 -> 뒤의 함수식을 거쳐 생성된 값으로 반환
단, 인터페이스 사용 시 인터페이스의 메서드가 1개 이상이면 람다 함수 사용 불가
>> 람다함수로 사용할 인터페이스는 @FunctionalInterface 어노테이션 사용
@FunctionalInterface //함수형 인터페이스: 단 한개의 메서드만 가질 수 있음.
interface Cal_2 {
int sum(int a, int b);
}
public class Lambda {
public static void main(String[] args) {
Cal_2 mc1 = (a, b) -> a+b; //인터페이스에 이미 입력값의 자료형이 정의되어 있으므로 (a, b)만 써도 가능
Cal_2 mc2 = Integer::sum; //Integer.sum(int a, int b)과도 동일하므로 Integer::sum으로도 요약 가능
int result1 = mc1.sum(3, 4);
int result2 = mc2.sum(3, 4);
System.out.println(result1);
System.out.println(result2);
}
}
함수형 인터페이스 : BiFunction, BinaryOperator
두 인수를 받아 하나의 결과를 생성하는 기능 구현 시 사용
인터페이스 선언 없이 사용하여
더 축약하여 표현 가능한 방법이다.
BiFunction은 <>제네릭스 안에 입력항목 2개, 출력항목 1개의 자료형을 입력,
BinaryOperator는 입출력항목의 자료형이 모두 동일한 경우 <>제네릭스 안이 1가지만 사용
import java.util.function.BiFunction;
import java.util.function.BinaryOperator; //입출력항목이 모두 동일할 경우
public class Lambda {
public static void main(String[] args) {
BiFunction<Integer, Integer, Integer> mc3 = (a, b) -> a+b;
//제공되는 인터페이스인 BiFunction으로 더 축약 표현 가능
// BiFunction<입력자료형1, 입력자료형2, 출력자료형3>
int result3 = mc3.apply(3,4); // sum이 아닌 apply메서드를 사용해야 함
System.out.println(result3);
BinaryOperator<Integer> mc4 = (a, b) -> a+b;
int result4 = mc4.apply(3, 4);
System.out.println(result4);
}
}