람다(Lamda): 익명 함수

CosmoNumb·2024년 8월 4일
0

java

목록 보기
20/24

람다(Lambda)익명 함수(Anonymous Function)를 지칭하는 용어입니다. 자바 8에서 도입되었으며, 코드를 간결하게 작성하고 함수형 프로그래밍을 지원하기 위해 사용됩니다. 람다는 주로 컬렉션 프레임워크와 스트림 API(Java Stream API)와 함께 사용됩니다.

람다 표현식(Lambda Expression)

람다 표현식은 매개변수 리스트, 화살표(->), 함수 본문으로 구성됩니다.

(parameters) -> expression

또는

(parameters) -> { statements; }

기본 예제

기본적인 람다 표현식의 예제는 다음과 같습니다.

// 기존 방식의 익명 내부 클래스
Runnable runnable = new Runnable() {
    @Override
    public void run() {
        System.out.println("Hello, world!");
    }
};

// 람다 표현식
Runnable lambdaRunnable = () -> System.out.println("Hello, world!");

람다 표현식은 익명 내부 클래스(Anonymous Inner Class)를 대체할 수 있습니다. 위 예제에서 Runnable 인터페이스를 구현하는 익명 내부 클래스는 람다 표현식으로 간결하게 표현할 수 있습니다.

람다 표현식의 구성 요소

  1. 매개변수 리스트: 람다 표현식의 입력 매개변수. 매개변수가 없을 때는 빈 괄호 ()를 사용합니다.
  2. 화살표(->): 매개변수 리스트와 함수 본문을 구분하는 역할을 합니다.
  3. 함수 본문: 실행할 코드 블록입니다. 단일 표현식일 경우 중괄호 {}를 생략할 수 있습니다.

예제: 리스트 필터링

람다 표현식을 사용하여 리스트의 필터링을 간결하게 할 수 있습니다.

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

public class LambdaExample {
    public static void main(String[] args) {
        List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David");

        // 기존 방식
        List<String> result = names.stream()
                                   .filter(new Predicate<String>() {
                                       @Override
                                       public boolean test(String name) {
                                           return name.startsWith("A");
                                       }
                                   })
                                   .collect(Collectors.toList());

        // 람다 표현식
        List<String> lambdaResult = names.stream()
                                         .filter(name -> name.startsWith("A"))
                                         .collect(Collectors.toList());

        System.out.println(lambdaResult); // 출력: [Alice]
    }
}

위 예제에서 filter 메서드는 스트림의 각 요소에 대해 주어진 조건을 검사하는 역할을 합니다. 람다 표현식을 사용하여 name.startsWith("A") 조건을 간결하게 표현할 수 있습니다.

함수형 인터페이스

람다 표현식은 주로 함수형 인터페이스와 함께 사용됩니다. 함수형 인터페이스는 단 하나의 추상 메서드를 가진 인터페이스입니다. 자바 8에서는 몇 가지 표준 함수형 인터페이스가 제공됩니다.

  • Predicate<T>: 입력을 받아 boolean 값을 반환하는 함수형 인터페이스.
  • Function<T, R>: 입력을 받아 다른 타입의 출력을 반환하는 함수형 인터페이스.
  • Consumer<T>: 입력을 받아 어떤 작업을 수행하고, 아무것도 반환하지 않는 함수형 인터페이스.
  • Supplier<T>: 입력을 받지 않고 출력을 반환하는 함수형 인터페이스.

요약

람다 표현식은 자바에서 익명 함수를 작성하는 간결한 방법입니다. 이는 주로 컬렉션과 스트림 API와 함께 사용되어 코드를 더 직관적이고 간결하게 만듭니다. 람다는 함수형 프로그래밍 스타일을 지원하고, 코드의 가독성과 유지보수성을 향상시킵니다.

0개의 댓글