CHANGEL
SOLID BASICS
CHANGEL

공지사항

  • DEV.CHANGEL PROFILE
  • SOLID BASIC (289)
    • 공부 STUDY (115)
      • JAVA (57)
      • C | C++ (34)
      • CS (11)
      • MySQL (2)
      • ALGORITHM (1)
      • HTML (2)
      • CSS (2)
      • JS (2)
      • CODING (0)
      • MINI PROJECT (3)
    • 스프링 SPRING (21)
      • [SPRING] 김영한 스프링 입문 (11)
      • [SPRING] 남궁성 스프링의 정석 (1)
      • [SPRING] 스프링 핵심원리 (9)
    • 전공 수업 CS (65)
      • Computer Network (13)
      • algorithms (21)
      • Computer Architecture (7)
      • Software Engineering (4)
      • Data Structure (2)
      • DataBase (1)
      • Digital Engineering (14)
      • Discrete Mathematics (3)
      • Introduction to programming (0)
      • Mobile Software (0)
      • Intelligence and Informatio.. (0)
    • 대외활동 (35)
      • 신한은행 대학생 홍보대사 34기 (8)
      • SKT T프렌즈 5기 (13)
      • SK DEVOTION YOUNG 1기 (9)
      • 성균관 대학교 공학교육혁신센터 수강 (3)
      • 수상 기록 (1)
    • 솝트 33기 안드로이드 (7)
      • [솝트 33기] 회고록 (0)
      • [솝트 33기] 안드로이드 왕초보 스터디 (2)
      • [솝트 33기] 코틀린 스터디 (0)
      • [솝트 33기] Git을 털어보자 깃털 스터디 (4)
    • 멋쟁이사자처럼 11기 (6)
      • 멋사 회고록 (4)
      • 백엔드 세션 (1)
      • 기획 세션 (1)
      • 연합해커톤 운영단 (기획팀) (0)
    • 백준 BAEKJOON (16)
    • 독서 BOOK (10)
    • 자격증 CERTIFICATE (1)
    • 준비 서류 및 회고록 MEMOIR (7)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 글쓰기

최근 댓글

인기 글

CHANGEL

SOLID BASICS

[JAVA] 스트림(Stream)이란 무엇일까?
공부 STUDY/JAVA

[JAVA] 스트림(Stream)이란 무엇일까?

2023. 1. 23. 07:32

Stream의 특징

기능적인 측면에서 스트림은 컬렉션(배열 포함)의 저장 요소를 하나씩 참조해서 람다식으로 처리할 수 있도록 해주는 반복자이다.

 

 

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

 

정수가 있는 리스트를 하나씩 순회하면서 값을 출력하는 단순한 코드이다.

이를 스트림으로 바꿔 보자.

 

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

 

 

코드가 매우 간결해진 것을 확인할 수 있다.

 

 

스트림의 특징

 

 

(1) 람다식으로 요소 처리 코드를 제공한다.

위의 코드에서 볼 수 있듯이, 스트림은 람다식 또는 메소드 참조를 이용한다.

따라서, 코드가 간결해지는 장점이 있다.

 

 

(2) 내부 반복자를 사용하므로 병렬 처리가 쉽다.

외부 반복자란 개발자가 코드로 직접 컬렉션의 요소를 반복해서 가져오는 코드 패턴을 말한다. 우리가 흔히 사용하는 index를 이용한 반복문이나 Iterator를 사용한 while문은 모두 외부 반복자를 이용하는 것이다. 반면, 내부 반복자는 컬렉션 내부에서 요소들을 반복시키고, 개발자는 요소당 처리해야 할 코드만 제공하는 코드 패턴을 말한다,

 

 

 

 

위의 그림은 외부 반복자와 내부 반복자를 나타낸 것이다. 내부 반복자는 요소들의 변경 순서를 변경하거나, 멀티 코어 CPU를 최대한 활용하기 위해서 요소들을 분배시켜 병렬 작업을 할 수 있도록 도와 준다.

 

 

 

 

스트림은 람다식으로 요소 처리 내용만 전달할 뿐, 반복은 컬렉션 내부에서 일어난다. 따라서, 요소의 병렬 처리가 컬렉션 내부에서 처리되므로 효율적인 병렬 처리가 가능하다.

 

 

(3) 중간 처리와 최종 처리가 존재한다.

스트림은 컬렉션의 요소에 대해 중간 처리와 최종 처리를 수행할 수 있는데, 중간 처리에서는 매핑, 필터링, 정렬을 수행하고 최종 처리에서는 반복, 카운팅, 평균, 총합 등의 집계 처리를 수행한다.

 

만약, 학생 객체를 요소로 가지는 컬렉션이 있다고 가정하면, 중간 처리에서 학생의 수학 점수를 뽑아 내고 최종 처리에서는 수학 점수의 평균값을 산출하는 행위를 할 수 있음!

 

 

 

'공부 STUDY > JAVA' 카테고리의 다른 글

[JAVA] 자바의 예외처리(Exception) | try-catch-finally 문, try-with-resource 문  (0) 2023.01.23
[JAVA] 람다식이란? 람다식 사용 방법에대해 알아보자!  (1) 2023.01.23
[JAVA] 내부 클래스(inner class)와 익명 클래스(anonymous class)에대해 알아보자  (1) 2023.01.21
[자바/ 자료구조] 컬렉션 프레임워크 공부 전, 자료구조를 간단히 정리해보자!  (0) 2023.01.21
[JAVA] Optional이란? | Optional 개념 및 사용법  (0) 2023.01.17
    '공부 STUDY/JAVA' 카테고리의 다른 글
    • [JAVA] 자바의 예외처리(Exception) | try-catch-finally 문, try-with-resource 문
    • [JAVA] 람다식이란? 람다식 사용 방법에대해 알아보자!
    • [JAVA] 내부 클래스(inner class)와 익명 클래스(anonymous class)에대해 알아보자
    • [자바/ 자료구조] 컬렉션 프레임워크 공부 전, 자료구조를 간단히 정리해보자!
    CHANGEL
    CHANGEL
    NOT GIVING UP | SOLID BASICS

    티스토리툴바