기술 학습

JAVA 람다 표현식(Lambda Expressions) 개념과 활용

EpicArts 2025. 2. 15. 17:42

1. 람다 표현식이란?

람다 표현식(Lambda Expressions)은 Java 8에서 도입된 기능으로, 익명 함수를 보다 간결하게 작성할 수 있도록 도와줍니다. 코드의 가독성을 높이고 불필요한 반복을 줄이는 데 유용합니다.

람다 표현식의 주요 특징:

  • 간결한 코드 작성: 불필요한 코드 줄 수를 줄여 가독성을 높임
  • 함수형 프로그래밍 지원: Java에서 함수형 프로그래밍을 사용할 수 있도록 지원
  • 컬렉션과 스트림 API와의 조합: 스트림 API에서 데이터 처리 시 유용함

📌 람다 표현식 기본 문법

(매개변수) -> { 실행 코드 }
  • 매개변수가 하나이면 괄호 () 생략 가능
  • 실행 코드가 한 줄이면 {} 중괄호 생략 가능
  • return 문이 있으면 {} 생략 불가

2. 람다 표현식 기본 사용법

2.1 기존 방식 (익명 클래스 사용)

interface MyFunctionalInterface {
    void sayHello();
}

public class LambdaExample {
    public static void main(String[] args) {
        MyFunctionalInterface instance = new MyFunctionalInterface() {
            @Override
            public void sayHello() {
                System.out.println("Hello, Java!");
            }
        };
        instance.sayHello();
    }
}

2.2 람다 표현식 적용

public class LambdaExample {
    public static void main(String[] args) {
        MyFunctionalInterface instance = () -> System.out.println("Hello, Java!");
        instance.sayHello();
    }
}

익명 클래스를 람다 표현식으로 대체하여 코드가 훨씬 간결해짐


3. 람다 표현식과 함수형 인터페이스

람다 표현식을 사용하려면 반드시 함수형 인터페이스(@FunctionalInterface) 가 필요합니다.

3.1 함수형 인터페이스 정의

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

3.2 람다 표현식 사용

public class LambdaTest {
    public static void main(String[] args) {
        MyFunction add = (a, b) -> a + b;
        MyFunction multiply = (a, b) -> a * b;
        
        System.out.println("더하기: " + add.apply(5, 3));
        System.out.println("곱하기: " + multiply.apply(5, 3));
    }
}

함수형 인터페이스를 활용하여 람다식을 유연하게 적용 가능


4. 람다 표현식과 Java 내장 함수형 인터페이스

Java는 java.util.function 패키지에 여러 가지 내장 함수형 인터페이스를 제공합니다.

인터페이스설명메서드

Consumer<T> 입력값을 받아 처리(리턴값 없음) accept(T t)
Supplier<T> 입력값 없이 출력값 반환 get()
Function<T,R> 입력값을 받아 변환 후 반환 apply(T t)
Predicate<T> 입력값을 받아 참/거짓 반환 test(T t)

4.1 Consumer 사용 예제

import java.util.function.Consumer;

public class ConsumerExample {
    public static void main(String[] args) {
        Consumer<String> printMessage = message -> System.out.println("메시지: " + message);
        printMessage.accept("Hello Lambda!");
    }
}

4.2 Function 사용 예제

import java.util.function.Function;

public class FunctionExample {
    public static void main(String[] args) {
        Function<Integer, String> intToString = num -> "숫자: " + num;
        System.out.println(intToString.apply(10));
    }
}

5. 컬렉션과 람다 표현식 활용

람다 표현식은 컬렉션을 처리할 때 매우 유용합니다.

5.1 forEach 사용

import java.util.Arrays;
import java.util.List;

public class LambdaForEach {
    public static void main(String[] args) {
        List<String> list = Arrays.asList("Apple", "Banana", "Cherry");
        list.forEach(item -> System.out.println("과일: " + item));
    }
}

5.2 filter 사용

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class LambdaFilter {
    public static void main(String[] args) {
        List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David");
        List<String> filteredNames = names.stream()
                                          .filter(name -> name.startsWith("A"))
                                          .collect(Collectors.toList());
        System.out.println(filteredNames);
    }
}

6. 결론

이번 글에서는 Java의 람다 표현식 개념과 활용법을 살펴보았습니다. 람다 표현식을 사용하면 코드가 더 간결해지고 가독성이 높아집니다. 함수형 인터페이스와 함께 활용하면 더욱 효과적인 프로그래밍이 가능합니다.

다음 글에서는 자바의 함수형 프로그래밍(Functional Programming) 개념에 대해 다뤄보겠습니다!