Skip to content
Woo Jin Jang edited this page Jun 6, 2025 · 5 revisions

📚 스트림 API

  • 스트림(Stream)은 자바 8부터 추가된 기능으로 데이터 흐름을 추상화해서 다루는 도구이다.
  • 컬렉션 또는 배열 등의 요소들을 연산 파이프라인을 통해 연속적인 형태로 다루는 것이다.

❓파이프라인

스트림이 여러 단계를 거쳐 변환되고 처리되는 모습이 마치 물이 여러 파이프를 타고 이동하면서 정수 시설이나 필터를 거치는 과정과 유사하기 때문에 파이프라인이라는 용어를 사용한다.

[스트림의 특징]

  • 데이터 소스를 변경하지 않는다.
    • 스트림에서 제공하는 연산들은 원본 컬렉션을 변경하지 않고 결과만 새로 생성한다.
  • 일회성(1회 소비)
    • 한 번 사용된 스트림은 다시 사용할 수 없으며 필요하다면 새로 스트림을 생성해야 한다.
  • 파이프라인 구성
    • 중간 연산들이 이어지다가 최종 연산을 만나면 연산이 수행되고 종료된다.
  • 지연 연산
    • 중간 연산은 실제로 필요할 때까지 동작하지 않고 최종 연산이 실행될 때 한 번에 처리된다.
  • 병렬
    • 스트림으로부터 병렬 스트림을 쉽게 만들 수 있어 멀티코어 환경에서 병렬 연산을 비교적 단순한 코드로 작성할 수 있다.

📚 지연 연산

  • 스트림 API에서 지연 연산이란, filter, map과 같은 중간 연산들은 toList와 같은 최종 연산이 호출되기 전까지 실제로 실행되지 않는다는 의미이다.
  • 즉, 중간 연산들은 결과를 바로 계산하지 않고, "무엇을 해야할지"에 대한 설정만을 저장해둔다.
  • 그리고 최종 연산이 실행되는 그 순간, 그때서야 중간 연산이 순차적으로 한 번에 수행된다.
  • 불필요한 연산 생략 가능
    • findFirst(), limit()와 같은 단축 연산을 사용하면 결과를 찾은 시점에서 더 이상 나머지 요소들을 처리할 필요가 없다.
  • 메모리 사용 효율
    • 중간 연산 결과를 매 단계마다 별도 자료구조에 저장하지 않고 최종 연산 때까지 필요할 때만 가져와서 처리한다.
  • 파이프라인 최적화
    • 스트림은 요소를 하나씩 꺼내면서 연산을 묶어서 실행할 수 있다.
    • 이렇게 하면 메모리를 절약할 수 있고 짜잘짜잘하게 중간 단계마다 저장하지 않아도 되므로 내부적으로 효율적으로 동작하게 된다.

📚 중간 연산

📚 FlatMap

📚 최종 연산

📚 기본형 특화 스트림

📚 컬렉터

📚 다운 스트림 컬렉터

📖 Java

📖 Kotlin

📖 Coroutine

📖 Spring

📖 Spring Security

📖 Spring Batch

📖 Reactive Programming

📖 Database

📖 MySQL

📖 Redis

📖 JPA

📖 QueryDsl

📖 MSA

📖 Kafka

📖 Apache Flink

  • [Apache Flink - Apache Flink Architecture]
  • [Apache Flink - Stream Processing]
  • [Apache Flink - Data Stream API & Window]
  • [Apache Flink - State Management]

📖 HTTP

📖 AWS

📖 Docker

📖 Kubernetes

📖 CI/CD

📖 Nginx

📖 Monitoring🥈

  • [Monitoring - Log Concept]
  • [Monitoring - Log Level & Filter]
  • [Monitoring - Logback]
  • [Monitoring - Log Collection with ELK Stack]
  • [Monitoring - Log Monitoring with Kibana]
  • [Monitoring - Building a Monitoring System with Spring Boot Actuator]
  • [Monitoring - Server Monitoring with Prometheus and Grafana with Discord Alerts]

📖 Test

📖 Effective Java 3/E

📖 Kotlin Academy - Effective Kotlin

📖 Kotlin Academy - 핵심편

📖 스프링으로 시작하는 리액티브 프로그래밍

📖 가상 면접 사례로 배우는 대규모 시스템 설계 기초 1

📖 가상 면접 사례로 배우는 대규모 시스템 설계 기초 2

📖 Clean Code

📖 리팩토링 2판

📖 주니어 백엔드 개발자가 반드시 알아야 할 실무 지식

📖 GraphQL

Clone this wiki locally