BASIS/JAVA

Java의 Stream - 초보자를 위한 꼬리의 꼬리를 무는 자바

사당맥주 2023. 7. 17. 11:07
반응형

자바의 Stream이란?

Stream은 자바 8에서 추가된 기능으로, 데이터의 처리를 선언적으로 표현할 수 있는 API입니다. Stream은 함수형 프로그래밍의 개념을 도입하여, 데이터를 스트림으로 다루는 방식을 제공합니다. 이를 통해 컬렉션을 효율적으로 처리하고 변환하는데 사용됩니다.

Stream의 특징

- 선언적이고 가독성 좋은 코드: Stream은 코드를 더 간결하게 작성할 수 있도록 도와줍니다. 반복문을 사용하는 것보다 선언적인 코드로 데이터 처리 작업을 표현할 수 있습니다.
- 내부 반복: Stream은 내부적으로 반복을 처리하므로 개발자가 명시적으로 요소에 접근할 필요가 없습니다. Stream이 내부적으로 반복을 처리하기 때문에 코드를 더 간결하게 작성할 수 있습니다.
- 지연 평가: Stream 연산은 지연 평가(lazy evaluation)를 사용합니다. 이는 Stream 파이프라인에 있는 중간 연산이 최종 연산이 호출될 때까지 실제로 수행되지 않는다는 의미입니다. 이로써 효율적인 처리가 가능해집니다.

Stream 예시

1. 컬렉션의 요소 필터링

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
List<Integer> evenNumbers = numbers.stream()
                                   .filter(number -> number % 2 == 0)
                                   .collect(Collectors.toList());


위의 예시에서는 `filter()` 메서드를 사용하여 짝수만 필터링하고, `collect()` 메서드를 사용하여 결과를 List로 수집합니다.

2. 요소 변환

List<String> words = Arrays.asList("Apple", "Banana", "Cherry");
List<Integer> wordLengths = words.stream()
                                 .map(String::length)
                                 .collect(Collectors.toList());


위의 예시에서는 `map()` 메서드를 사용하여 각 단어의 길이를 추출하고, `collect()` 메서드를 사용하여 결과를 List로 수집합니다.

3. 정렬 및 제한

List<Integer> numbers = Arrays.asList(5, 3, 9, 1, 2);
List<Integer> sortedLimited = numbers.stream()
                                     .sorted()
                                     .limit(3)
                                     .collect(Collectors.toList());



위의 예시에서는 `sorted()` 메서드를 사용하여 요소를 정렬하고, `limit()` 메서드를 사용하여 상위 3개의 요소를 제한합니다.

4. 그룹화

List<Person> people = Arrays.asList(
    new Person("Alice", 25),
    new Person("Bob", 30),
    new Person("Alice", 35)
);
Map<String, List<Person>> peopleByName = people.stream()
                                               .collect(Collectors.groupingBy(Person::getName));


위의 예시에서는 `groupingBy()` 메서드를 사용하여 이름으로 그룹화한 결과를 Map으로 수집합니다.

이처럼 Stream을 사용하면 데이터 처리 작업을 보다 선언적이고 간결한 방식으로 표현할 수 있습니다.

반응형