블로그

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

맞춤형 GPTs의 시대: 나만의 AI 만들기 (초보 가이드)

AI 기술이 급속도로 발전하면서, 이제 누구나 자신만의 맞춤형 AI를 만들 수 있는 시대가 왔습니다. OpenAI의 GPTs 기능을 활용하면, 코딩 지식 없이도 특정 목적에 최적화된 AI를 설계할 수 있습니다. 이 가이드에서는 초보자도 쉽게 따라할 수 있는 단계별 방법과 활용 팁을 소개합니다. 1. 맞춤형 GPTs란? 맞춤형 GPTs는 OpenAI가 제공하는 기능으로, 사용자가 특정 주제나 업무에 특화된 AI를 만들

세부정보 →
Testim Sapienz Selenium

2025년 최고의 자동화 테스트 도구: Testim, Sapienz, Selenium

소프트웨어 개발의 핵심은 품질 보장이다. 빠른 릴리스 주기와 복잡한 애플리케이션 환경에서 자동화 테스트는 더 이상 선택이 아닌 필수다. 2025년에도 여전히 Testim, Sapienz, Selenium은 업계를 선도하는 도구로 자리매김하고 있다. 이 세 가지 솔루션은 각기 다른 강점을 가지고 있으며, 프로젝트 요구사항에 맞춰 최적의 선택을 할 수 있도록 돕는다. 이 글에서는 각 도구의 특징, 장단점, 그리고 어떤 상황에서

세부정보 →
What is ai semiconductor

AI 반도체 시장과 우리나라의 경쟁력: 미래를 잡을 수 있을까?

전 세계가 AI 반도체 시장을 놓고 치열한 경쟁을 벌이고 있다. NVIDIA, AMD, 인텔 같은 글로벌 기업들이 선점한 가운데, 한국의 삼성전자와 SK하이닉스도 AI 반도체 시장에서 주목받고 있다. 하지만 과연 우리나라는 이 경쟁에서 얼마나 경쟁력을 갖추고 있을까? 이 글에서는 AI 반도체 시장의 현황과 한국의 위치, 그리고 필요한 전략을 분석한다. AI 반도체란 무엇인가? AI 반도체는 인공지능(AI) 연산을 최적화하기

세부정보 →
ai extension

AI 파일 열기 및 편집, 변환하는 간단한 방법

AI (Adobe Illustrator) 파일은 벡터 그래픽 작업에 필수적인 형식이지만, 전문 소프트웨어가 없으면 열기나 편집이 어려울 수 있습니다. 이 글에서는 AI 파일을 쉽게 열고 편집하며 다른 형식으로 변환하는 방법을 단계별로 안내합니다. 1. AI 파일이란? AI 파일은 Adobe Illustrator에서 생성되는 벡터 기반 이미지 파일로, 로고, 아이콘, 일러스트레이션 등에 주로 사용됩니다. 래스터 이미지와 달리 확대해도 화질이 깨지지 않아

세부정보 →
software outsourcing development

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

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

세부정보 →
Overseas developer

개발자 해외 취업기: 글로벌 시장으로 나아가는 법

해외에서 개발자로 일하는 것은 도전이자 기회다. 높은 연봉, 다양한 문화 경험, 세계적인 기업과 협업할 수 있는 가능성은 많은 한국 개발자들을 끌어들인다. 하지만 막상 해외 취업을 준비하려면 어떤 절차를 거쳐야 할지, 어떤 스킬이 필요한지 막막할 수 있다. 이 글에서는 개발자 해외 취업을 준비하는 방법부터 성공 사례, 유의할 점까지 실질적인 정보를 제공한다. 글로벌 시장에서 두각을 나타내고 싶은

세부정보 →
Scroll to Top