자바 8부터 도입된 **람다식(Lambda Expression)**과 컬렉션 데이터를 선언형으로 가공하는 **스트림 API(Stream API)**를 학습합니다.
1. 람다 & 스트림 용어 사전 (Glossary)
- Lambda Expression: 메소드를 식(Expression) 형태로 간결하게 표현한 익명 함수 문법입니다. (
(a, b) -> a + b) - Functional Interface: 단 1개의 추상 메소드만 존재하는 인터페이스입니다. (
@FunctionalInterface어노테이션 사용) - Stream API: 컬렉션이나 배열의 요소를 원본 변경 없이 가공, 필터링, 매핑, 집계하는 함수형 파이프라인 연산입니다.
2. 스트림 API 파이프라인 가공 예제
import java.util.*;
import java.util.stream.Collectors;
public class StreamApiExample {
public static void main(String[] args) {
List<String> names = Arrays.asList("Kim", "Park", "Lee", "Choi", "Kang");
// [요구사항] 이름이 'K'로 시작하는 사람들만 골라 대문자로 바꾸고 정렬하여 리스트로 수집
List<String> result = names.stream()
.filter(name -> name.startsWith("K")) // 중간 연산: 'K'로 시작 필터링
.map(String::toUpperCase) // 중간 연산: 대문자 매핑
.sorted() // 중간 연산: 정렬
.collect(Collectors.toList()); // 최종 연산: 결과 수집
System.out.println("가공 결과: " + result);
}
}
3. 자주 묻는 질문 (Q&A)
Q. 스트림에서 map()과 flatMap()의 차이는?
A. map()은 요소 1개를 다른 형태 1개로 변환하지만, flatMap()은 요소 1개가 여러 개로 분할되는 구조(예: 리스트의 리스트)를 하나의 단일 평탄화 스트림으로 쫙 펼쳐서 변환합니다.