람다(Lambda)는 익명 함수(Anonymous Function)를 지칭하는 용어입니다. 자바 8에서 도입되었으며, 코드를 간결하게 작성하고 함수형 프로그래밍을 지원하기 위해 사용됩니다. 람다는 주로 컬렉션 프레임워크와 스트림 API(Java Stream API)와 함께 사용됩니다.
람다 표현식은 매개변수 리스트, 화살표(->), 함수 본문으로 구성됩니다.
(parameters) -> expression
또는
(parameters) -> { statements; }
기본적인 람다 표현식의 예제는 다음과 같습니다.
// 기존 방식의 익명 내부 클래스
Runnable runnable = new Runnable() {
@Override
public void run() {
System.out.println("Hello, world!");
}
};
// 람다 표현식
Runnable lambdaRunnable = () -> System.out.println("Hello, world!");
람다 표현식은 익명 내부 클래스(Anonymous Inner Class)를 대체할 수 있습니다. 위 예제에서 Runnable
인터페이스를 구현하는 익명 내부 클래스는 람다 표현식으로 간결하게 표현할 수 있습니다.
()
를 사용합니다.{}
를 생략할 수 있습니다.람다 표현식을 사용하여 리스트의 필터링을 간결하게 할 수 있습니다.
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class LambdaExample {
public static void main(String[] args) {
List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David");
// 기존 방식
List<String> result = names.stream()
.filter(new Predicate<String>() {
@Override
public boolean test(String name) {
return name.startsWith("A");
}
})
.collect(Collectors.toList());
// 람다 표현식
List<String> lambdaResult = names.stream()
.filter(name -> name.startsWith("A"))
.collect(Collectors.toList());
System.out.println(lambdaResult); // 출력: [Alice]
}
}
위 예제에서 filter
메서드는 스트림의 각 요소에 대해 주어진 조건을 검사하는 역할을 합니다. 람다 표현식을 사용하여 name.startsWith("A")
조건을 간결하게 표현할 수 있습니다.
람다 표현식은 주로 함수형 인터페이스와 함께 사용됩니다. 함수형 인터페이스는 단 하나의 추상 메서드를 가진 인터페이스입니다. 자바 8에서는 몇 가지 표준 함수형 인터페이스가 제공됩니다.
Predicate<T>
: 입력을 받아 boolean 값을 반환하는 함수형 인터페이스.Function<T, R>
: 입력을 받아 다른 타입의 출력을 반환하는 함수형 인터페이스.Consumer<T>
: 입력을 받아 어떤 작업을 수행하고, 아무것도 반환하지 않는 함수형 인터페이스.Supplier<T>
: 입력을 받지 않고 출력을 반환하는 함수형 인터페이스.람다 표현식은 자바에서 익명 함수를 작성하는 간결한 방법입니다. 이는 주로 컬렉션과 스트림 API와 함께 사용되어 코드를 더 직관적이고 간결하게 만듭니다. 람다는 함수형 프로그래밍 스타일을 지원하고, 코드의 가독성과 유지보수성을 향상시킵니다.