람다 표현식 (Lambda Expression)

·2025년 10월 24일

SPRING

목록 보기
15/15

정의

  • 익명 함수(Anonymous Function) 를 간결하게 표현하는 문법
  • 메서드 이름 없이, “함수의 구현부만” 표현 가능
  • Java 8 이상부터 지원
  • 형식 비교:
    • Java 문법: (매개변수) -> { 실행문 }
    • JavaScript 문법: (매개변수) => { 실행문 }
// 전통적인 익명 클래스
new Thread(new Runnable() {
    @Override
    public void run() {
        System.out.println("쓰레드 실행");
    }
}).start();

// 람다식
new Thread(() -> System.out.println("쓰레드 실행")).start();

목적

  • 메서드 선언 없이 코드를 간결하게 표현
  • 불필요한 익명 클래스 제거 → 가독성 향상
  • 함수형 프로그래밍(Functional Programming) 구현 가능

주요 사용처

구분설명
Stream API데이터 처리(필터링, 매핑, 집계 등)
Java GUI (Swing, AWT 등)이벤트 리스너 간소화
컬렉션 프레임워크List, Map, Set 내부 처리 간편화

| 인터페이스 | 형태 | 설명 | 주요 메서드 | 예시 |

| ------------------ | ------------ | ---------------------- | ------------------- | ---------------------------- |
| Function<T, R> | 입력 → 반환 | 입력값 T 받아 R 반환 | R apply(T t) | x -> x * 2 |
| Supplier | () → 반환 | 입력 없이 T 반환 | T get() | () -> Math.random() |
| Consumer | 입력 → void | 입력값 받아 소비 | void accept(T t) | x -> System.out.println(x) |
| Predicate | 입력 → boolean | 입력값 평가 후 true/false 반환 | boolean test(T t) | x -> x > 0 |

Function<Integer, Integer> square = x -> x * x;
Supplier<Double> random = () -> Math.random();
Consumer<String> printer = s -> System.out.println(s);
Predicate<Integer> isEven = n -> n % 2 == 0;

활용

구분설명예시
① 추상 메서드 구현체함수형 인터페이스 구현 시Runnable r = () -> System.out.println("실행");
② 컬렉션 프레임워크forEach, removeIf 등list.forEach(System.out::println);
③ 정렬 시Comparator 람다 사용list.sort((a, b) -> a.length() - b.length());

메서드 참조 (Method Reference)

람다식을 더 간결하게 표현할 수 있는 문법
(매개변수) -> 클래스명.메서드명(매개변수) → 클래스명::메서드명

형태예시의미
정적 메서드 참조ClassName::staticMethodMath::abs
인스턴스 메서드 참조object::instanceMethodSystem.out::println
생성자 참조ClassName::newArrayList::new
  List<String> names = List.of("Kim", "Lee", "Park");
names.forEach(System.out::println); // 메서드 참조

0개의 댓글