블로그

Stream이란? 기본 개념과 특징 (JAVA)

Stream이란? 기본 개념과 특징 (JAVA)

What is Java Stream

아이디어가 있나요?

Hitek 언제나 당신과 동행할 준비가 되어있습니다.​

Java에서 Stream은 데이터 처리 연산을 지원하는 강력한 API로, 컬렉션, 배열, I/O 소스 등의 요소를 선언적이고 효율적으로 다룰 수 있게 해줍니다. 함수형 프로그래밍 스타일을 도입하여 코드의 가독성과 유지보수성을 높이며, 병렬 처리도 간편하게 구현할 수 있습니다.

이 글에서는 Java Stream의 기본 개념, 주요 특징, 활용 방법을 쉽게 설명하고, 실제 예제를 통해 어떻게 효율적으로 사용할 수 있는지 알아보겠습니다.


1. Stream의 기본 개념

✔ Stream이란?

Java 8부터 도입된 Stream컬렉션, 배열 등의 데이터 소스를 처리하기 위한 추상화된 연산 집합입니다. 기존의 반복문(for, while)을 대체할 수 있으며, 람다 표현식(Lambda Expressions)과 함께 사용해 코드를 간결하게 작성할 수 있습니다.

Stream은 크게 두 가지로 구분됩니다:

  • 중간 연산(Intermediate Operations): filter(), map(), sorted() 등 데이터를 변환하거나 필터링합니다.
  • 최종 연산(Terminal Operations): forEach(), collect(), reduce() 등 결과를 도출하거나 저장합니다.
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");  
names.stream()  
     .filter(name -> name.startsWith("A")) // 중간 연산  
     .forEach(System.out::println);         // 최종 연산

✔ Stream vs. 컬렉션(Collection)

특징 Stream 컬렉션(Collection)
데이터 저장 저장하지 않음 데이터를 저장
연산 방식 지연 평가(Lazy Evaluation) 즉시 평가(Eager Evaluation)
재사용 가능 불가능 (1회용) 가능
병렬 처리 parallelStream()으로 간단히 구현 직접 구현 필요

Stream은 데이터를 직접 저장하지 않고, 원본 데이터를 읽어 연산을 수행합니다. 또한, 지연 평가(Lazy Evaluation)를 사용해 필요한 시점에만 연산을 실행합니다.


2. Stream의 주요 특징

(1) 선언형 프로그래밍 지원

Stream은 “무엇을 할 것인가(What)”에 집중합니다. 반복문은 “어떻게 할 것인가(How)”를 명시해야 하지만, Stream은 원하는 결과를 선언하면 내부적으로 처리합니다.

// 기존 방식 (How)  
for (String name : names) {  
    if (name.length() > 3) {  
        System.out.println(name);  
    }  
}  

// Stream 방식 (What)  
names.stream()  
     .filter(name -> name.length() > 3)  
     .forEach(System.out::println);

(2) 병렬 처리(Parallel Processing) 간소화

parallelStream()을 사용하면 멀티 스레드 환경에서 데이터를 분할 처리할 수 있습니다.

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);  
int sum = numbers.parallelStream()  
                 .mapToInt(Integer::intValue)  
                 .sum();  
System.out.println("합계: " + sum);

(3) 불변성(Immutable)과 1회용

Stream은 원본 데이터를 변경하지 않으며, 한 번 사용하면 재사용할 수 없습니다.

Stream<String> stream = names.stream();  
stream.forEach(System.out::println);  
// stream.forEach(...); → Error: 스트림이 이미 소비됨

3. Stream의 주요 연산

✔ 중간 연산 (Intermediate Operations)

  • filter(Predicate): 조건에 맞는 요소만 필터링
  • map(Function): 요소를 변환 (예: 문자열 → 길이)
  • sorted(): 정렬
  • distinct(): 중복 제거
List<Integer> numbers = Arrays.asList(1, 2, 3, 2, 4);  
numbers.stream()  
      .filter(n -> n % 2 == 0)  // 짝수만 필터링  
      .map(n -> n * 2)           // 2배 증가  
      .distinct()                // 중복 제거  
      .forEach(System.out::println);

✔ 최종 연산 (Terminal Operations)

  • forEach(Consumer): 각 요소에 작업 수행
  • collect(Collector): 결과를 컬렉션으로 변환
  • reduce(): 요소를 결합 (예: 총합 계산)
  • count(): 요소 개수 반환
List<String> result = names.stream()  
                          .filter(name -> name.length() > 3)  
                          .collect(Collectors.toList());  
System.out.println(result); // [Alice, Charlie]

4. Stream 활용 예제

✔ 조건에 맞는 데이터 필터링

List<Product> products = Arrays.asList(  
    new Product("Laptop", 1200),  
    new Product("Phone", 800),  
    new Product("Tablet", 500)  
);  

List<Product> expensiveProducts = products.stream()  
                                        .filter(p -> p.getPrice() > 1000)  
                                        .collect(Collectors.toList());

✔ 데이터 변환 및 정렬

List<String> cities = Arrays.asList("Seoul", "Busan", "Incheon");  
List<String> sortedCities = cities.stream()  
                                 .sorted()  
                                 .map(String::toUpperCase)  
                                 .collect(Collectors.toList());

✔ 병렬 스트림으로 성능 향상

long count = products.parallelStream()  
                    .filter(p -> p.getPrice() > 500)  
                    .count();

5. Stream 사용 시 주의사항

  • 재사용 불가: 한 번 사용한 Stream은 다시 사용할 수 없습니다.
  • 지연 평가: 중간 연산은 최종 연산이 호출될 때 실행됩니다.
  • 성능 고려: 간단한 연산은 for문이 더 빠를 수 있습니다.

마치며

Java의 Stream API는 데이터 처리 방식을 혁신적으로 바꿨습니다. 람다 표현식과 결합해 코드를 간결하게 만들고, 병렬 처리를 쉽게 구현할 수 있어 현대적인 Java 개발에 필수적입니다.

Stream을 제대로 활용하면 가독성 높은 코드효율적인 데이터 처리를 동시에 얻을 수 있습니다. 이제 여러분의 프로젝트에서 Stream을 적용해보세요!

💡 더 알아보기

“어떤 데이터 처리 작업을 Stream으로 바꿔볼까요?” 💬 댓글로 여러분의 생각을 공유해주세요!

Picture of Khoi Tran

Khoi Tran

Khoi Tran은 하이텍 소프트웨어의 소유자입니다. 사회의 문제를 해결하기 위해 기술적인 솔루션을 기여하는 것에 열정적입니다. 소프트웨어 엔지니어로 6년간 근무한 기술 지식과 (2018년부터 기술 회사를 운영하며) 비즈니스 감각을 갖추고 있어, 나는 다행히도 이 디지털 세계에서 더 많은 장점을 가진 현대적인 기업가 세대의 일부로 위치하고 있습니다.
기타 기사
kotlin app development

Kotlin: 초보 앱 개발자를 위한 단계별 가이드

모바일 앱 개발을 시작하려는 초보자라면 Kotlin이 최적의 선택일 수 있습니다. Google이 Android 공식 언어로 채택한 Kotlin은 간결한 문법과 강력한 기능으로 개발자들에게 큰 인기를 끌고 있습니다. 이 가이드에서는 Kotlin을 처음 접하는 분들을 위해 기본 개념부터 실제 앱 개발까지 단계별로 안내합니다. 1. Kotlin이란? 왜 배워야 할까? Kotlin은 2011년 JetBrains에서 개발한 현대적인 프로그래밍 언어로, Java와 100% 호환되면서도 더욱

세부정보 →
app development ideas

최고의 모바일 앱 아이디어 33가지: 2025년 트렌드와 기회

모바일 앱 시장은 끊임없이 진화하고 있습니다. 새로운 기술과 사용자 요구가 결합되면서 독창적이고 수익성 있는 앱 아이디어가 계속해서 등장하고 있습니다. 만약 창업을 계획 중이거나 앱 개발로 수익을 창출하고 싶다면, 이 글에서 소개하는 33가지 모바일 앱 아이디어를 참고해 보세요. 왜 모바일 앱인가? 2024년 기준, 전 세계 모바일 앱 시장 규모는 6,000억 달러를 넘어섰으며, Statista에 따르면 앞으로도 지속적인

세부정보 →
ai app

2025년 최고의 AI 앱 12가지(무료 및 유료)

AI 기술은 이미 우리 삶 깊숙이 자리 잡았고, 2025년에는 더욱 강력하고 스마트한 앱들이 등장하고 있습니다. 일상 업무를 효율적으로 처리하거나 창의적인 작업을 돕는 AI부터 개인 비서처럼 활용할 수 있는 도구까지, 올해 주목할 만한 AI 앱들을 무료와 유료로 구분해 소개합니다. 1. ChatGPT-5 (OpenAI) – 최고의 AI 챗봇 ChatGPT-5는 OpenAI의 최신 모델로, 더 자연스럽고 정교한 대화가 가능합니다. 문서

세부정보 →
What is Spring Security

스프링 시큐리티란? 자바 개발자를 위한 강력한 보안 프레임워크

웹 애플리케이션 개발에서 보안은 절대 무시할 수 없는 요소입니다. 해킹, 데이터 유출, 인증 우회 같은 위협들이 끊임없이 진화하는 만큼, 개발자들은 안전한 시스템을 구축하기 위해 신뢰할 수 있는 도구가 필요합니다. 바로 여기서 스프링 시큐리티(Spring Security)가 빛을 발합니다. 스프링 시큐리티는 자바 기반의 엔터프라이즈 애플리케이션을 보호하기 위해 설계된 프레임워크로, 인증(Authentication)과 권한 부여(Authorization)를 쉽게 구현할 수 있도록 지원합니다. 만약

세부정보 →
Overseas IT outsourcing

구글도 하는 해외 IT 아웃소싱의 장점과 단점

글로벌 기업인 구글부터 스타트업까지, 많은 기업들이 해외 IT 아웃소싱을 활용하고 있습니다. 비용 절감부터 전문 인력 활용까지 다양한 이점이 있지만, 언어 장벽이나 문화적 차이 같은 어려움도 존재합니다. 이 글에서는 해외 IT 아웃소싱의 장단점을 분석하고, 성공적인 협업을 위한 팁을 소개합니다. 해외 IT 아웃소싱이란? 해외 IT 아웃소싱은 개발, 디자인, QA(품질 검증) 등 IT 관련 업무를 해외 전문 업체에

세부정보 →
CX Customer Experience vs UX User Experience

BX, CX, UX, 오해 없이 소통하기: 고객 경험의 핵심 이해

고객과의 소통은 비즈니스의 성패를 좌우합니다. BX(Brand Experience), CX(Customer Experience), UX(User Experience)는 각각 다른 의미를 지니지만, 종종 혼용되거나 오해를 일으키곤 합니다. 이 세 가지 개념을 명확히 이해하면 브랜드와 고객 사이의 소통을 더욱 효과적으로 만들 수 있습니다. 이 글에서는 BX, CX, UX의 차이점과 상호작용을 살펴보고, 어떻게 조화롭게 활용할지 알아보겠습니다. 1. BX, CX, UX란 무엇인가? (1) BX (Brand

세부정보 →
Scroll to Top