어제 오늘 내일

[Java] Lambda(람다식) 쉽게 이해하기 본문

IT/Java

[Java] Lambda(람다식) 쉽게 이해하기

hi.anna 2026. 1. 3. 08:17

Java의 Lambda(람다식)은 메서드를 하나의 표현식(식)으로 간단하게 작성할 수 있게 하는 기능입니다.
코드를 짧고 간결하게 만들어 주며, 특히 Stream API, 익명 클래스, 함수형 인터페이스와 함께 사용할 때 매우 유용합니다.

람다식은 Java 8에서 도입되었으며, “함수를 간단하게 표현하는 문법”이라고 이해하면 쉽습니다.

 

1. 람다식이란?

람다식은 메서드를 단순한 식(Expression) 형태로 표현한 것입니다.

형식:

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

예:

(int x, int y) -> { return x + y; }

더 간단히:

(x, y) -> x + y

 

 

2. 왜 람다식을 사용할까?

✔ 코드가 짧아짐

익명 클래스를 일일이 작성할 필요 없음.

✔ 가독성 향상

의도만 남기고 불필요한 코드 제거.

✔ 함수형 프로그래밍 스타일 지원

Stream API와 함께 매우 강력함.

 

3. 람다식 사용 조건: 함수형 인터페이스

람다식은 반드시 추상 메서드가 하나만 있는 인터페이스와 함께 사용됩니다.
이런 인터페이스를 **함수형 인터페이스(Functional Interface)**라고 합니다.

대표 예

  • Runnable
  • Callable
  • Comparator
  • Consumer, Supplier, Function 등 (java.util.function 패키지)

직접 정의할 수도 있습니다:

@FunctionalInterface
interface MyFunction {
    int apply(int x, int y);
}

 

 

4. 익명 클래스 vs 람다식 비교

익명 클래스

Runnable r1 = new Runnable() {
    @Override
    public void run() {
        System.out.println("Run!");
    }
};

람다식

Runnable r2 = () -> System.out.println("Run!");

→ 코드 길이가 크게 줄어듦.

 

5. 람다식 기본 형태 예제

5-1. 매개변수 1개

x -> x * 2

5-2. 매개변수 2개

(x, y) -> x + y

5-3. 매개변수 없음

() -> System.out.println("Hello")

5-4. 실행문 여러 줄

(x, y) -> {
    int sum = x + y;
    return sum;
}

 

 

6. Stream에서 람다식 활용 예

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);

list.stream()
    .filter(n -> n % 2 == 0)
    .map(n -> n * 10)
    .forEach(n -> System.out.println(n));

출력:

20
40

설명

  • filter: 짝수만
  • map: 각 값을 10배
  • forEach: 출력

 

7. java.util.function 패키지 예시

람다식은 아래 함수형 인터페이스들과 함께 자주 사용됩니다.

7-1. Predicate (조건 검사)

Predicate<Integer> isEven = n -> n % 2 == 0;

7-2. Function<T, R> (값 변환)

Function<String, Integer> toLength = str -> str.length();

7-3. Consumer (값 소비)

Consumer<String> print = s -> System.out.println(s);

7-4. Supplier (값 제공)

Supplier<Double> random = () -> Math.random();

 

 

8. Comparator에서 람다식 사용

기존 방식:

Collections.sort(list, new Comparator<Integer>() {
    @Override
    public int compare(Integer a, Integer b) {
        return b - a;
    }
});

람다식:

Collections.sort(list, (a, b) -> b - a);

 

 

9. 전체 예제

@FunctionalInterface
interface Calculator {
    int calc(int x, int y);
}

public class Main {
    public static void main(String[] args) {
        Calculator add = (x, y) -> x + y;
        Calculator mul = (x, y) -> x * y;

        System.out.println(add.calc(3, 5)); // 8
        System.out.println(mul.calc(3, 5)); // 15
    }
}

설명

  • 함수형 인터페이스 사용
  • 람다식으로 메서드 구현을 간결하게 표현

 

10. 정리

  • 람다식은 메서드를 간단한 표현식으로 표현하는 문법
  • 함수형 인터페이스(추상 메서드 1개)와 함께 사용
  • 코드 간결성, 가독성, 생산성 증가
  • Stream API와의 조합에서 가장 큰 효과
  • 익명 클래스보다 간단한 대체 문법

 

 

반응형
Comments