스트림
스트림(Stream)이란?
- Java Stream은 데이터를 흐름처럼 처리하는 방식
- 컬렉션(List, Map, Set 등)을 선언형(Declarative) 으로 연속된 연산(Pipeline) 으로 처리할 수 있게 해주는 기능
- “어떻게(iteration) 돌릴지”가 아니라 “무엇을(map/filter/reduce) 하고 싶은지”에 집중하도록 만든 도구
스트림 VS 기존 방식
- 기존 방식 (명령형 Imperative)
List<String> result = new ArrayList<>();
for (String item : list) {
if (item.startsWith("A")) {
result.add(item.toUpperCase());
}
}
- Stream 방식 (선언형 Declarative)
List<String> result = list.stream()
.filter(s -> s.startsWith("A"))
.map(String::toUpperCase)
.toList();
- 더 짧고, 더 명확하고, 쉽게 읽힌다.
스트림+Optional VS 기존 체이닝
| 항목 | 스트림+Optional | 기존 체이닝 |
|---|---|---|
| NPE 위험 | 거의 없음 | 매우 높음 |
| Optional 처리 | .map() / .flatMap() → 안전 |
.get() 반복 → 위험 |
| 디폴트 처리 | .orElse() 로 자연스럽게 |
불가능 |
| 가독성 | 단계적, 명확 | 복잡, null-safe 아님 |
| 확장성 | 매우 강함 | 약함 |
| 유지보수성 | 좋음 | 나쁨 |
참고
- ChatGPT-5.1
보완/복습
- 2025.12.03 생성