람다식 표현

sungs·2025년 6월 22일

자바

목록 보기
18/95

✅ 람다식이란?

람다식은 익명 함수(이름 없는 함수)를 간단하게 표현하는 방식이다. 주로 함수형 인터페이스(Functional Interface)의 구현을 간결하게 작성할 때 사용한다.

💡 기존 익명 클래스 vs 람다식

// 기존 방식 (익명 클래스)
Runnable run1 = new Runnable() {
    @Override
    public void run() {
        System.out.println("Hello from Runnable!");
    }
};

// 람다식 사용
Runnable run2 = () -> System.out.println("Hello from Lambda!");

✅ 함수형 인터페이스(Functional Interface)

람다식을 사용하려면 인터페이스에 추상 메서드가 하나만 있어야 한다. 이를 함수형 인터페이스라고 한다.

예: @FunctionalInterface 어노테이션 사용

@FunctionalInterface
interface MyFunction {
    void doSomething();
}

※ @FunctionalInterface는 선택사항이지만, 두 개 이상 메서드가 생기면 컴파일 오류를 발생시켜 실수를 방지할 수 있다.

✅ 람다식 기본 문법

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

🔹 다양한 예시

// 매개변수 X, 리턴 X
() -> System.out.println("Hello");

// 매개변수 1개, 괄호 생략 가능
x -> System.out.println(x);

// 매개변수 2개 이상
(x, y) -> {
    int sum = x + y;
    return sum;
};

// 리턴문만 있는 경우 중괄호와 return 생략 가능
(x, y) -> x + y;

✅ 자주 사용하는 함수형 인터페이스

인터페이스설명메서드 시그니처
Runnable매개변수 없고 반환값 없음void run()
Consumer<T>T를 받아 소비, 반환값 없음void accept(T t)
Supplier<T>매개변수 없고 T를 반환T get()
Function<T,R>T를 받아 R을 반환R apply(T t)
Predicate<T>T를 받아 true/false 반환boolean test(T t)

✅ 실전 예제

🔸 리스트 필터링 (Predicate 활용)

List<String> names = Arrays.asList("Java", "Python", "JavaScript");

names.stream()
     .filter(name -> name.startsWith("J"))
     .forEach(System.out::println);

🔸 정렬 (Comparator 활용)

List<String> list = Arrays.asList("Banana", "Apple", "Cherry");

list.sort((s1, s2) -> s1.compareTo(s2));
System.out.println(list);

✅ 람다식의 장단점

✅ 장점

  • 코드가 간결해진다

  • 함수형 프로그래밍을 지원

  • 익명 내부 클래스보다 가독성이 좋다

⚠️ 단점

  • 디버깅 어려움

  • 복잡한 로직에는 오히려 가독성 저하

profile
앱 개발 공부 중

0개의 댓글