주의

  • 본 게시글은 ChatGPT로 작성되었습니다. 잘못된 정보가 있을 수 있습니다.

개요:

스트림 API는 자바 8에서 도입된 기능으로, 컬렉션의 데이터를 쉽게 처리할 수 있는 방법을 제공합니다. 스트림을 사용하면 필터링, 매핑, 정렬, 집계 등의 작업을 훨씬 간결하고 직관적으로 수행할 수 있습니다. 함수형 프로그래밍 스타일을 지원하며, 람다식을 통해 코드를 더욱 깔끔하게 작성할 수 있습니다.

상세:

스트림의 기본 개념

  • 스트림: 데이터의 흐름을 표현하며, 데이터 소스(예: 컬렉션, 배열 등)에서 파이프라인을 통해 데이터를 처리합니다.
  • 지연 계산: 스트림은 필요한 경우에만 계산하며, 중간 연산과 최종 연산으로 나뉩니다.

스트림의 주요 특징

  • 불변성: 스트림의 결과는 원본 데이터를 변경하지 않습니다.
  • 연속된 작업: 여러 작업을 연결하여 사용할 수 있으며, 각 작업은 결과를 새로운 스트림으로 반환합니다.

주요 메서드

  • filter(Predicate<T> predicate): 조건에 맞는 요소 필터링
  • map(Function<T, R> mapper): 요소 변환
  • collect(Collector<T, A, R> collector): 결과를 컬렉션으로 집계
  • reduce(B identity, BinaryOperator<T> accumulator): 집계 연산 수행

사용 예시

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
 
public class StreamExample {
    public static void main(String[] args) {
        List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David");
 
        List<String> filteredNames = names.stream()
            .filter(name -> name.startsWith("C"))
            .map(String::toUpperCase)
            .collect(Collectors.toList());
 
        System.out.println(filteredNames); // [CHARLIE]
    }
}

예상 면접 질문/답안:

  1. 스트림 API란 무엇인가요?

    • 스트림 API는 컬렉션의 데이터를 쉽게 처리할 수 있는 도구입니다. 데이터를 필터링, 변환, 집계하는 작업을 간결하고 효율적으로 수행할 수 있게 해줍니다.
  2. 스트림의 중간 연산과 최종 연산의 차이는 무엇인가요?

    • 중간 연산은 스트림을 변환하여 새로운 스트림을 반환하고, 최종 연산은 스트림을 소모하여 결과를 반환합니다. 예를 들어, filter는 중간 연산이고, collect는 최종 연산입니다.
  3. 람다식이 스트림 API 사용에 어떤 역할을 하나요?

    • 람다식은 간결한 구문으로 함수형 인터페이스를 구현할 수 있게 해줍니다. 스트림 API의 메서드에 람다식을 사용하여 필터링이나 매핑 등을 간편하게 정의할 수 있습니다.
  4. 스트림을 사용하지 않고 동일한 작업을 수행할 수 있나요?

    • 가능합니다. 하지만 전통적인 루프와 조건문을 사용할 경우 훨씬 더 많은 코드가 필요하며, 가독성이 떨어질 수 있습니다. 스트림 API는 더 직관적이고 declarative한 방식으로 이러한 작업을 할 수 있게 도와줍니다.
  5. 스트림의 병렬처리 기능에 대해 설명해 주세요.

    • 스트림은 병렬처리를 지원하여 데이터를 여러 스레드에서 동시에 처리할 수 있습니다. 이는 parallelStream() 메서드를 사용할 통해 쉽게 구현할 수 있으며, 대규모 데이터 처리 성능을 향상시킬 수 있습니다.

스스로 찾아보면 좋은 연관 주제:

  • 람다식과 함수형 프로그래밍: 자바에서 함수형 프로그래밍의 기초와 람다식의 사용법
  • 컬렉션 프레임워크: 자바의 다양한 컬렉션 인터페이스 및 구현 클래스 탐색
  • Optional 클래스: null 안전성을 제공하는 방법과 사용 방법
  • 병렬 스트림: 성능 향상을 위한 스트림의 병렬 처리 기법
  • 자바 8의 새로운 기능: 자바 8에서 도입된 다양한 새로운 기능에 대한 개요