IT/JAVA

[JAVA] 자바 기초 복습 (Chapter.14) part3

j8970 2025. 3. 6. 09:59

📅 학습 기간: 2월 3주차!
🎯 학습 내용: 스트림 API 개념 및 활용


📌 1. 스트림 API란?

💡 컬렉션 데이터를 선언적으로 처리하도록 지원하는 도구

  • 데이터 필터링, 변환, 집계 등의 작업 수행
  • 람다 표현식과 결합하여 간결한 코드 작성 가능
  • 함수형 프로그래밍 기법과 함께 사용

✅ 2. 스트림 API의 특징

1️⃣ 데이터 파이프라인 구축

  • 데이터를 연속적으로 처리하는 방식
  • 여러 중간 연산을 연결하여 최종 연산에서 처리

2️⃣ 불변성 (Immutable)

  • 원본 데이터 변경 없이 새로운 값을 반환

3️⃣ 지연 처리 (Lazy Evaluation)

  • 중간 연산은 즉시 실행되지 않고 최종 연산이 호출될 때 실행

✅ 3. 스트림 API의 기본 구성 요소

1) 소스 (Source)

  • 스트림을 생성하는 단계
  • 컬렉션, 배열, 파일을 스트림의 소스로 사용
List<String> names = Arrays.asList("전창현1", "전창현2", "문창배1", "문창배2");
Stream<String> nameStream = names.stream();  // 리스트를 스트림으로 변환

2) 중간 연산 (Intermediate Operations)

  • 데이터를 필터링 및 변환하는 과정
  • 연산이 연속적으로 연결 가능하며 새로운 스트림을 반환
메서드 설명
filter(Predicate<T>) 조건에 맞는 요소만 선택
map(Function<T, R>) 요소 변환
sorted() 요소 정렬
distinct() 중복 제거
limit(n) 처음부터 n개 선택
skip(n) 처음부터 n개 건너뜀
names.stream()
     .map(name -> name + "님")  // "전창현1" → "전창현1님"
     .filter(name -> name.startsWith("전"))  // "전창현1님" 선택
     .forEach(System.out::println);

3) 최종 연산 (Terminal Operations)

  • 스트림의 모든 데이터를 처리하고 결과 반환
  • 최종 연산이 호출되면 스트림이 종료됨 (재사용 불가!)
메서드 설명
forEach(Consumer<T>) 각 요소를 처리 (반환 X)
collect(Collectors.toList()) 결과를 리스트로 변환하여 반환
reduce(BinaryOperator<T>) 모든 요소를 하나의 값으로 줄임
count() 요소 개수 반환
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);

List<Integer> squaredNumbers = numbers.stream()
                                      .map(n -> n * n)  // 각 요소를 제곱
                                      .collect(Collectors.toList());  // 리스트로 변환

System.out.println(squaredNumbers);  // [1, 4, 9, 16, 25]

✅ 4. 스트림의 일회성 (재사용 불가)

💡 스트림은 한 번 사용하면 다시 사용할 수 없음!

Stream<Integer> stream = numbers.stream();
stream.map(n -> n * n)
      .collect(Collectors.toList());

// stream.filter(n -> n % 2 == 0)  // IllegalStateException 발생
//    .collect(Collectors.toList());

📌 스트림을 재사용하려면 새로운 스트림을 생성해야 함!


🎯 소감

📌 스트림 API를 사용하면 코드가 직관적이고 가독성이 좋아짐
📌 해당 기술들은 프로젝트를 하면서 많이 사용 될 것 같음 중요!!
📌 람다식과 함께 사용하면 코드가 더욱 간결해짐!


🚀 마무리

이번 장에서는 스트림 API의 개념과 주요 기능을 학습했다!