빙응의 공부 블로그

[JAVA]함수형 프로그래밍 - Stream API 본문

JAVA

[JAVA]함수형 프로그래밍 - Stream API

빙응이 2023. 11. 29. 22:17

📝Stream API에 대한 이해 

JAVA는 객체지향 언어(명령형 프로그래밍)이기 때문에 기본적으로 함수형 프로그래밍이 불가능하다.

하지만 JDK8부터 함수형 프로그래밍을 위한 Stream API, 람다식, 함수형 인터페이스 등을 지원하고 있다. 

Stream API

  • 데이터를 추상화하고, 처리하는데 자주 사용되는 함수들을 정의 

예를 들어보자 우리는 리스트에서 짝수 값을 찾아 제곱하여 출력하는 것을 만든다고 하자.

일반 코드
        List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

        // 짝수만 필터링하여 제곱 값 출력
        List<Integer> result = new ArrayList<>();
        for (int n : numbers) {
            if (n % 2 == 0) {
                result.add(n * n);
            }
        }

        // 결과 출력
        for (int square : result) {
            System.out.println(square);
        }
Stream API 사용
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

// 짝수만 필터링하여 제곱 값 출력
numbers.stream()
       .filter(n -> n % 2 == 0)
       .map(n -> n * n)
       .forEach(System.out::println);

 

함수형 프로그래밍은 가독성을 높이고 유지보수를 용이하게 해준다.

JAVA 8의 Stream API를 사용하면 위 코드처럼 더 간결해지고 이해하기 쉽게 해준다.

 

📝Stream API의 특징

원본의 데이터를 변경하지 않는다.

Stream API는 원본의 데이터를 조회하여 별도의 Stream을 생성한다. 그렇기 때문에 원본의 데이터로부터 읽기만 할 뿐, 모든 작업은 별도의 Stream 요소로 처리한다. 

Stream은 일회용이다.

Stream API는 일회용이기 때문에 종단 스트림(terminal stream)을 사용하면 재사용이 불가능하다. 

종단 스트림을 사용시 Stream을 다시 생성해주어야 한다. 

  List<String> words = Arrays.asList("Java", "Stream", "API");

        // 스트림 생성
        Stream<String> wordStream = words.stream();

        // 중간 연산: 길이가 4 이상인 단어만 필터링
        Stream<String> filteredStream = wordStream.filter(word -> word.length() >= 4);

        // 최종 연산: 각 단어 출력
        filteredStream.forEach(System.out::println);

        // 다시 같은 스트림을 사용하려고 하면 IllegalStateException이 발생
        filteredStream.forEach(System.out::println);
내부 반복으로 작업을 처리한다.

Stream을 이용하면 코드가 간결해지는 이유는 내부 반복에 있다.

기존 반복문을 사용하기 위해선 for이나 while 같은 문법을 사용해야 했지만, Stream은 반복 문법을 내부에 숨기고 있다.

//내부 반복으로 작업을 처리한다. 
filteredStream.forEach(System.out::println);
컬렉션 처리에 효과적이다.

Stream API는 기존의 컬렉션을 다루는 메서드와 함께 사용할 수 있다. 컬렉션 데이터를 처리할 때 연산을 적용하여 

결과를 가공할 수 있다. 

 

병렬 처리 지원

Stream API는 내부적으로 병렬 처리를 지원한다. 

'parallel()' 메서드를 이용하여 스트림을 병렬 스트림으로 변환할 수 있다. 

 

 

 

📝정리 

Java 8에 추가된 Stream API는 함수형 프로그래밍을 지원하는 도구로, 데이터 처리를 추상화하고 가독성을 높여준다.

실무에서 자주 사용하는 만큼 잘 사용하는 법을 알아두는게 좋다.


✔참조 사이트