10. Lambda & Stream

Lambda와 Stream은 함수형 프로그래밍 스타일을 지원하여 코드를 간결하게 작성하고, 컬렉션 데이터를 처리하는 데 편리한 기능입니다. Lambda는 익명 함수를 표현하고 사용할 수 있게 해주며, Stream은 데이터 요소의 연속적인 처리를 지원하여 컬렉션 데이터를 효과적으로 다룰 수 있도록 도와줍니다.

1. Lambda (람다)

  • 람다는 익명 함수(anonymous function)를 생성하기 위한 기능입니다. 일반적으로 메서드를 간결하게 표현하고, 함수를 인수로 전달하거나 변수로 저장하는 데 사용됩니다.

  • 람다 표현식은 -> 기호를 사용하여 정의되며, 매개변수와 메서드 바디로 구성됩니다.

  • 람다는 함수형 인터페이스(Functional Interface)를 대상으로 사용되며, 해당 인터페이스의 추상 메서드를 구현하는 익명 함수로 취급됩니다.

예시:

Runnable runnable = () -> {
    System.out.println("Hello, World!");
};
runnable.run();

2. Stream (스트림)

  • 스트림은 데이터 요소의 연속적인 흐름을 나타내는 개념으로, 컬렉션 데이터를 처리하고 변환하는 데 사용됩니다.

  • 스트림은 컬렉션을 대상으로 데이터 처리 작업을 수행하는데 사용되며, 데이터를 필터링, 매핑, 정렬, 그룹화 등 다양한 작업을 연속적으로 수행할 수 있습니다.

  • 스트림은 데이터 소스에 대한 변경을 가하지 않고 원본 데이터를 유지하며, 함수형 프로그래밍 스타일로 작성됩니다.

예시:

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
int sum = numbers.stream()
                 .filter(n -> n % 2 == 0)
                 .mapToInt(n -> n * 2)
                 .sum();
System.out.println(sum);  // 출력: 12

위의 예시에서, numbers 리스트를 스트림으로 변환하여 짝수만 필터링하고, 각 요소를 2배로 매핑한 후에 합계를 구합니다. 이러한 작업은 중간 연산(intermediate operation)과 최종 연산(terminal operation)으로 구성되며, 최종 연산인 sum()을 호출하여 결과를 얻을 수 있습니다.

Last updated