본문 바로가기
IT/Java

Stream 이란?

by 성준하이 2022. 11. 28.
반응형

기존에는 자바에서 컬렉션 데이터를 처리할때 특정 조건에 따라 필터링을 하려면 아주 복잡한 과정을 거쳐야했다.

그에 비해 SQL 에서는 아주 간단한 쿼리로 데이터를 검색하고 그 방법은 명시적이기도 하여 주로 이용이 되었다.

java8 에서부터 새롭게 추가된 기능인 스트림(Stream)은 자바의 컬렉션 데이터에 대해 sql 질의문처럼 데이터를 처리할수 있게 해준다.

 

기존

기존에는 컬렉션 데이터를 다루러면 for 나 for each 등 루프를 돌면서 처리를 해줬고 점점 무거워짐에 따라 성능이 많이 저하가 되었다.

 

스트림

스트림에서는 데이터를 선언형 으로 쉽게 처리할 수 있다.

복잡한 루프를 돌지 않아도 되고 루프 중첩때매 성능저하를 두려워할 필요도 없다.

또한 스트림은 병령 처리를 별도로 멀티스레드 구현 없이도 쉽게 구현이 가능하다.

 

기존에는 아래와 같이 반복문을 돌며 반복 데이터를 가져온다.

List<Integer> test = new ArrayList<>();
for (Member member : Members)
    test.add(member.getAge());

 

하지만 스트림을 사용하면 아래와 같다.

List<Integer> test = memberList.stream()
        .filter(member -> member.getAge().equals("20"))        // 20살 필터링
        .sorted(Comparator.comparing(Member:getName))         // 이름 순서대로 정렬
        .map(Member::getAge).collect(Collectors.toList());    // member 고유번호 출력

또한 스트림의 장점은 병렬 처리도 가능하다.

똑같은 코드를 이와같이 짜면 된다.

List test = memberList.parallelStream()
        .filter(member -> member.getAge().equals("20"))        // 20살 필터링
        .sorted(Comparator.comparing(Member:getName))         // 이름 순서대로 정렬
        .map(Member::getAge).collect(Collectors.toList());    // member 고유번호 출력

 

예제의 filter, sorted, map 등 함수는 Steam API 에서 제공하는 함수이니 참고 바란다.

더 간결하고 가독성이 좋아진다.
유연성이 좋아진다.
성능이 좋아진다.

 

스트림과 컬렉션의 차이점

비유로 쉽게 설명하면 HDD에 저장된 동영상과 유투브의 동영상을 비교하면 된다.

HDD에 저장된 영상은 내가 보고싶은 시점에 보고싶은 지점을 클릭하면 바로 재생이 되는데 유투브 의 경우는 온라인 스트리밍을 거치면서

그때그때 데이터를 다시 끌고 와야한다.

 

  • 데이터 계산 시점
    • 컬렉션 : 모든 요소는 컬렉션에 추가되기 전에 계산이 된다.
    • 스트림 : 요청시에 요청한 부분만큼 계산이된다.(고정된 자료구조)
  • 반복의 일회성
    • 컬렉션 : 같은 소스에 대해 여러번 반복처리를 할수 있다.
    • 스트림 :단 한번만 반복문 처리를 할수가 있다.
  • 외부반복, 내부 반복
    • 컬렉션의 경우 for each 문법을 사용해서 사용자가 반복문을 직접 명시해야해서 외부반복이라고 함
    • 스트림은 라이브러리를 사용하는 내부반복 개념
반응형

'IT > Java' 카테고리의 다른 글

List 와 map 에 대해서  (30) 2022.12.02
자이썬(Jython) 이란?  (40) 2022.12.01
객체 생성 방법 ( 생성자 / 정적팩토리메서드 / builder)  (22) 2022.11.27
Eclipse에서 IntelliJ 단축키 사용하기  (21) 2022.11.26
JPA 로그 설정 관련  (25) 2022.11.24

댓글