2. 람다 표현식 (Lambda Expression)

람다 표현식은 자바 8에서 함수형 프로그래밍을 지원하기 위해 도입된 기능으로, 익명 내부 클래스의 간결한 대체 문법입니다. 코드의 간결성과 가독성을 높여주며, 주로 함수형 인터페이스와 함께 사용됩니다.

함수형 프로그래밍(Functional Programming)

함수를 기반으로 하는 프로그래밍 패러다임으로, 객체중심의 객체지향 프로그래밍과는 다른 개발방법론. 프로그래밍 언어가 함수형 프로그래밍을 지원하기 위해서는 함수가 값으로써 전달 되는 일급함수의 특징을 가지고 있어야 함수형 프로그래밍을 지원한다고 볼 수 있다.

자바에서는 함수형 프로그래밍을 지원하기 위해, 익명 내부클래스를 마치 함수처럼 사용할 수 있는 람다식을 지원합니다.


람다란 무엇인가?

람다 표현식은 함수를 하나의 식(expression)처럼 표현한 것으로, 메서드 이름 없이도 동작을 전달할 수 있습니다.

📌 기본 문법

(매개변수) -> { 실행문 }

📌 예시 1: Runnable

Runnable r = () -> {
    System.out.println("Hello Lambda");
};
r.run();

📌 예시 2: Comparator

Comparator<Integer> comp = (a, b) -> b - a;
System.out.println(comp.compare(5, 2)); // 결과: -3

함수형 인터페이스 (FunctionalInterface)

보통 람다 표현식은 하나의 추상 메서드만 가지는 인터페이스(함수형 인터페이스) 를 구현하여 사용합니다. 함수형 프로그래밍에서 람다식은 함수이지만, 자바에서 함수는 반드시 클래스 안에 구현해야 하므로 실제로는 인터페이스의 메서드를 구현한 익명객체입니다.

✅ 대표 함수형 인터페이스

인터페이스

역할

함수

Runnable

매개변수 없이 실행만 함

void run()

Callable<T>

값을 반환하는 실행 객체

T call() throws Exception

Comparator<T>

비교 함수

int Compare(T o1, T o2)

Consumer<T>

소비자 함수 (값 소비, 반환 없음)

void accept(T t)

Function<T,R>

변환 함수 (T를 R로)

R apply(T t)

Predicate<T>

조건 검사 함수 (boolean 반환)

boolean test(T t)


메서드 참조 (::)

이미 존재하는 메서드를 람다식처럼 전달할 수 있게 해주는 문법으로 정적 메서드 참조, 인스턴스 메서드 참조, 객체의 메서드 참조, 생성자 참조등 다야한 참조구문이 존재한다.

List<String> names = Arrays.asList("Java", "Python", "C++");
names.forEach(x -> System.out.println(x)); // 람다식
names.forEach(System.out::println);  // 메서드 참조로 람다식을 직접 짜지 않고 전달.

Last updated