자바 8의 람다 표현식과 스트림 API

2023. 11. 11. 23:55개발 문서/Java

728x90
반응형

Java 8에서 도입된 람다 표현식과 스트림 API는 자바의 함수형 프로그래밍 지원을 강화하고, 컬렉션을 더 효과적으로 다룰 수 있게 해주는 기능들입니다.

1. 람다 표현식 (Lambda Expressions):

람다 표현식은 익명 함수의 선언을 간결하게 표현하는 방법으로, 자바 8에서 함수형 프로그래밍을 지원하기 위해 도입되었습니다.

// 기존의 익명 클래스
Runnable runnable1 = new Runnable() {
    @Override
    public void run() {
        System.out.println("Hello, World!");
    }
};

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

람다 표현식은 매우 간결하게 코드를 표현할 수 있고, 함수형 인터페이스를 통해 사용됩니다.

2. 함수형 인터페이스 (Functional Interface):

람다 표현식을 사용하기 위해서는 함수형 인터페이스가 필요합니다. 함수형 인터페이스는 하나의 추상 메소드를 갖는 인터페이스를 말합니다.

@FunctionalInterface
interface MyFunction {
    void myMethod();
}

// 람다 표현식으로 MyFunction 인터페이스 구현
MyFunction myFunction = () -> System.out.println("My Method");

3. 스트림 API:

스트림 API는 컬렉션을 함수형 프로그래밍의 스타일로 다룰 수 있는 기능을 제공합니다. 스트림을 사용하면 데이터를 더 쉽게 필터링, 매핑, 정렬할 수 있습니다.

List<String> languages = Arrays.asList("Java", "Python", "JavaScript", "C#", "Ruby");

// 스트림을 이용한 데이터 필터링과 매핑
List<String> result = languages.stream()
    .filter(lang -> lang.startsWith("J"))
    .map(String::toUpperCase)
    .collect(Collectors.toList());

System.out.println(result); // [JAVA, JAVASCRIPT]

스트림은 중간 연산과 최종 연산으로 구분됩니다. 중간 연산은 스트림을 반환하고, 최종 연산은 스트림을 사용하여 결과를 생성합니다. 이러한 특징 덕분에 스트림은 지연 평가(Lazy Evaluation)를 할 수 있어 성능을 향상시킬 수 있습니다.

스트림 API는 병렬 처리도 지원하여 멀티코어 환경에서 높은 성능을 제공합니다.

이 외에도 람다 표현식과 스트림 API는 다양한 기능들을 제공하며, 함수형 프로그래밍의 장점을 자바에 도입하였습니다. 코드의 가독성을 높이고 병렬 처리 등에 강점을 가지게 해주는 중요한 기능들 중 하나입니다.