ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Stream
    프로그래밍 기초 공부 2023. 2. 2. 17:58

    Stream

    • 실제의 입력이나 출력이 표현된 데이터의 이상화된 흐름을 의미
    • 운영체제에 의해 생성되는 가상의 연결고리를 의미
    • 중간 매개자 역할

     

     

    Stream 특징

    • 데이터를 담는 저장소는 아님
    • 데이터를 변경하지 않음
    • 재사용 불가
    • 각 요소가 한 번씩 처리됨
    • 무제한으로 사용될 수 있음

     

     

    Stream 종류

    입출력 Stream

    • Stream은 한 방향으로만 통신할 수 있음
    • 입력과 출력을 동시에 처리 불가
    • 사용 목적에 따라 입력 Stream과 출력 Stream으로 구분

     

    바이트 기반 Stream

    • 자바에서 Stream은 기본적으로 바이트 단위로 데이터를 전송

     

    보조 Stream

    • 자바에서 제공하는 보조 Stream은 실제로 데이터를 주고 받지 않음
    • 다른 Stream의 기능을 향상시키거나 새로운 기능을 추가해 줌

     

    문자 기반 Stream

    • 자바에서 Stream은 기본적으로 바이트 단위로 데이터를 전송
    • 자바에서는 1바이트씩 전송되는 바이트 기반 스트림으로는 처리가 원할하게 이루어지지 않을 수 있음
    • 문자 기반의 Stream도 별도로 제공을 함

     

     

    자바 Stream API

    • Java 8버전부터 사용가능
    • 다양한 방식으로 저장된 데이터를 읽고 쓰기 위한 공통된 방법을 제공
    자바에서는 많은 양의 데이터를 저장하기 위해 배열이나 컬렉션을 사용함
    이렇게 저장된 데이터에 접근하기 위해 반복문이나 iterator를 사용하여 매번 새로운 코드를 작성해야 함
    그러나 이렇게 작성된 코드는 길이가 길고 가독성이 떨어지며, 재사용이 거의 불가능 함
    ㅡ> 데이터베이스의 쿼리와 같이 정형화된 처리 패턴을 가지지 못하였기 때문
    이러한 문제점을 극복하기 위해 Stream API를 도입

     

     

    Stream API 특징

    • 외부 반복을 통해 작업하는 컬렉션과는 달리 내부 반복을 사용하여 작업을 수행
    • 재사용이 가능한 컬렉션과는 달리 단 한번만 사용가능
    • 원본 데이터를 변경하지 않음
    • 스트림의 연산은 filter-map 기반의 API를 사용하여 지연연산을 통해 성능을 최적화 함
    • parallelStream() 메서드를 통하여 손쉬운 병렬 처리를 지원 

     

     

    Stream API 동작 흐름

    1. 스트림 생성

    2. 스트림 중개 연산 ㅡ> 스트림의 변환

    3. 스트림 최종 연산 ㅡ> 스트림의 사용

     

     

    Stream을 사용하지 않은 반복

    import java.util.*;
    
    public class Main {
    
      public static void main(String[] args) {
        List<Integer> list = Arrays.asList(0, 1, 2, 3);
        Iterator<Integer> it = list.iterator();
        while (it.hasNext()) {
          int num = it.next();
          System.out.println(num);
        }
      }
    }

     

    Stream API를 사용한 반복

    import java.util.*;
    import java.util.stream.*;
    
    public class Main {
    
      public static void main(String[] args) {
        List<Integer> list = Arrays.asList(0, 1, 2, 3);
        list.stream().forEach(System.out::println);
      }
    }

     

    '프로그래밍 기초 공부' 카테고리의 다른 글

    DAO, DTO, VO란?  (0) 2023.03.23
    Spring Annotation 정리  (0) 2023.03.13
    스크럼이란?  (0) 2023.01.25
    iBatis와 MyBatis  (0) 2023.01.24
    애자일과 워터폴  (0) 2023.01.19
Designed by Tistory.