‣ ‣ ‣
메서드 즉 함수를 하나의 식으로 표현한다. 함수형 프로그래밍을 지원한다. 객체지향적 표현과 상반되는 부분이 있다.
메서드의 이름없이 매개 변수를 바로 수식화 시킨 것이기 때문에 익명 함수의 한 종류라고 볼 수 있다.
int sum(int num1, int num2) {
return num1 + num2;
}
//람다 표현식
(num1, num2) -> num1 + num2
위와 같이 매개변수를 수식화시킨 것을 볼 수 있고 또 타입이 동적이다. 자동으로 타입을 인지하는 것이다.
람다식의 기본 구조는 매개 변수와 바디로 구성되어 있다. 매개 변수 타입은 생략 가능하다.
Java에서 람다식의 정체는 익명객체다. 익명객체를 선언하여 사용하는 것과 같다.
익명 객체를 람다식으로 표현하기 위해서는 인터페이스가 단 하나의 추상 메서드만 가져야 한다.
인터페이스가 단 하나의 추상 메서드를 가질 때 → 함수형 인터페이스
Java8이후 도입되었다. @FunctionalInterface
어노테이션을 붙여주어 람다식을 사용하겠다고 명시해준다.(생략가능) java.util.function
에 자주 쓰이는 함수형 인터페이스들이 정의되어 있다.
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
numbers.forEach(number -> System.out.println(number));
List<String> strings = Arrays.asList("a", "b", "c");
strings.forEach(s -> System.out.println(s.toUpperCase()));
컬렉션 요소 처리 및 필터링, 스레드 생성, 이벤트 리스너 기능 등에 활용한다. 프론트쪽에서 자주 사용한다고 한다.
numbers.forEach(number -> System.out.println(number));
strings.forEach(s -> System.out.println(s.toUpperCase()));
//위처럼 표현한 것을 아래로 더욱 간결하게 가능
numbers.forEach(System.out::println);
strings.forEach(String::toUpperCase);
기존 람다식을 더욱 간결하게도 가능하다. 클래스명::메서드명
의 구조로 사용한다.