자바의 람다식(Lambda Expression)은 함수형 프로그래밍 개념을 도입하여 자바의 생산성을 높이고, 코드의 가독성과 간결성을 개선하기 위해 등장했다.
람다식은 자바 8에서 도입되었다.
간단히 말해 자바의 메소드를 간결한 함수 식으로 표현한 것이다.
//일반 메서드
int add(int x, int y) {
return x + y;
}
//람다식으로 변경
(x, y) -> x + y;
타입을 생략을 해도 컴파일러가 에러를 띄우지않는 이유는, 컴파일러 나름대로 생략된 타입 위치를 추론하여 동작하게 해주기 때문이다.
함수형 인터페이스는 단 하나의 추상 메소드만 포함하는 인터페이스다
함수형 인터페이스는 여러개의 default 메소드나 static 메소드를 가질 수 있지만 추상 메서드는 하나여야 한다
람다 표현식(lambda expressions)과 메소드 참조(method references)를 사용하여 함수형 인터페이스의 인스턴스를 표현할 수 있다.
자주 사용되는 함수형 인터페이스
ex ) Runnable, ActionLisener, Comparator
@FunctionalInterface 애너테이션을 사용하여 함수형 인터페이스를 알려준다.
함수형 인터페이스는 람다 표현식으로 인스턴스를 생성할 수 있고 추상메서드가 1개가 아닐경우 컴파일에러를 낸다
@FunctionalInterface
interface FunctionalExample{
void functionalMethod();
}
//
FunctionalExample func = () -> {
System.out.println("헬로");
};
func.functionalMethod();
Java 8에서는 다양한 상황에 크게 네가지의 함수형 인터페이스 종류가 존재한다

- Consumer
- 하나의 인자를 받고 값을 반환하지 않는 함수형 인터페이스다
* Consumer<Integer> consumer = (value) -> System.out.println(value);
- Predicate
- Predicate 인터페이스는 하나의 인자를 받아서 boolean 값을 반환하는 함수형 인터페이스
* Predicate<Integer> isEven = (x) -> x % 2 == 0; // 짝수인지 확인
* System.out.println(isEven.test(4)); // true 출력
- Function
- Function은 자바에서 하나의 인자만 받으며, 요구되는 처리를 거친 후 값을 반환하는 함수형 인터페이스
* Function<Integer, Integer> function = (value) -> value * value;
* Integer num = function.apply(2);
- Supplier
- 어떠한 인자도 받지 않으며 하나 하나의 값을 리턴한다
- Supplier supplier = () -> “”;
- String str = Supplier.get()
함수형 인터페이스는 단 하나의 추상메서드만 포함하는 인터페이스로 람다식과 메서드 참조를 사용해 함수형 인터페이스를 구현할 수 있다
자바의 람다식(Lambda Expression)은 함수형 프로그래밍 개념을 도입하여 자바의 생산성을 높이고, 코드의 가독성과 간결성을 개선하기 위해 등장했다.
람다식은 자바 8에서 도입되었다.
함수형 인터페이스를 구현할 때 사용한다