블로그

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년부터 기술 회사를 운영하며) 비즈니스 감각을 갖추고 있어, 나는 다행히도 이 디지털 세계에서 더 많은 장점을 가진 현대적인 기업가 세대의 일부로 위치하고 있습니다.
기타 기사
superb ai

슈퍼브에이아이(Superb AI): 한국 시장을 선도하는 AI 솔루션

AI 기술이 급속도로 발전하면서, 기업들은 더 효율적이고 스마트한 솔루션을 찾고 있습니다. 그 중에서도 슈퍼브에이아이(Superb AI)는 데이터 라벨링부터 자동화 머신러닝까지, AI 개발 프로세스를 혁신하는 플랫폼으로 주목받고 있습니다. 이 글에서는 슈퍼브에이아이가 무엇인지, 어떤 혜택을 제공하는지, 그리고 한국 시장에서의 가능성에 대해 알아보겠습니다. 슈퍼브에이아이(Superb AI)란? 슈퍼브에이아이는 AI 학습 데이터 관리 및 자동화 플랫폼으로, 기업과 개발자들이 고품질의 AI 모델을 빠르게

세부정보 →
software outsourcing development

소프트웨어 외주 개발에서 손해를 방지하는 5가지 핵심 전략

소프트웨어 개발은 현대 비즈니스에서 필수적인 요소로 자리 잡았습니다. 하지만 모든 기업이 내부 개발 팀을 보유하고 있지는 않습니다. 이때 소프트웨어 외주 개발은 효율적이고 경제적인 해결책으로 주목받고 있습니다. 그러나 외주 개발을 통해 성공적인 결과를 얻기 위해서는 신중한 접근이 필요합니다. 이 글에서는 외주 개발을 통해 손해 보지 않는 방법을 심층적으로 알아보겠습니다. 왜 소프트웨어 외주 개발을 선택하는가? 소프트웨어 개발은

세부정보 →
Harness and Spinnaker

Harness와 Spinnaker로 소프트웨어 배포 자동화하기

현대 소프트웨어 개발에서는 빠르고 안정적인 배포가 경쟁력의 핵심입니다. Harness와 Spinnaker는 각각 CI/CD(지속적 통합/지속적 배포) 파이프라인을 혁신적으로 단순화하는 강력한 도구로, 개발 팀이 더 효율적으로 작업할 수 있도록 지원합니다. 이 글에서는 두 플랫폼의 특징을 비교하고, 어떻게 함께 사용하면 소프트웨어 배포를 최적화할 수 있는지 알아보겠습니다. 왜 Harness와 Spinnaker인가? 1. Harness: AI 기반의 지능형 CI/CD Harness는 머신러닝을 활용해 배포

세부정보 →
What is Open Source

오픈 소스란? 소프트웨어 혁명의 시작

소프트웨어 세계에서 오픈 소스(Open Source)는 단순한 개발 방식이 아닌, 협업과 혁신을 이끄는 철학입니다. 코드가 공개되어 누구나 수정, 배포, 개선할 수 있는 이 모델은 기술 발전의 속도를 재정의했으며, 오늘날 대표적인 IT 기업들도 오픈 소스 생태계에 기여하고 있습니다. 그렇다면 오픈 소스의 정확한 의미는 무엇일까요? 왜 많은 개발자와 기업이 이 모델을 선택할까요? 이 글에서는 오픈 소스의 개념, 역사,

세부정보 →
mobile app development expert

모바일앱개발전문가: 스마트폰 시대의 핵심 플레이어

스마트폰이 일상의 필수품이 된 지금, 모바일 앱은 우리 삶의 거의 모든 측면을 변화시키고 있습니다. 커피 한 잔 주문부터 금융 거래, 건강 관리까지 모든 것이 손끝에서 가능해졌죠. 이러한 변화의 중심에는 모바일앱개발전문가가 있습니다. 그들은 단순히 코드를 작성하는 사람들이 아니라, 사용자 경험을 설계하고 비즈니스 목표를 실현하는 현대 디지털 시대의 아키텍트입니다. 이 글에서는 모바일앱개발전문가의 역할, 필요한 역량, 그리고 이

세부정보 →
How to use GitHub

초보자를 위한 깃허브(GitHub) 사용법: 코드 관리의 첫걸음

깃허브는 개발자라면 반드시 알아야 하는 필수 도구입니다. 하지만 처음 접하는 분들에게는 복잡하게 느껴질 수 있습니다. 이 글에서는 깃허브의 기본 개념부터 실전 사용법까지, 초보자도 쉽게 따라할 수 있는 가이드를 제공합니다. 1. 깃허브(GitHub)란? 왜 사용할까? 깃허브는 Git 기반의 버전 관리 시스템(VCS)으로, 개발자들이 프로젝트를 협업하고 코드를 관리하는 플랫폼입니다. 버전 관리: 코드 변경 이력을 추적하고, 이전 버전으로 되돌릴 수

세부정보 →
Scroll to Top