오봉이와 함께하는 개발 블로그

Java - Stream의 기본 개념 본문

자바

Java - Stream의 기본 개념

오봉봉이 2022. 11. 26. 16:53
728x90

Stream의 기본 개념

자바를 사용하며 stream을 사용한 것이 최근 일이다.
그동안 이 좋았던 라이브러리를 왜 사용하지 않았는지 모르겠다.
그래서 stream에 대해 공부를 해보려고 한다.

Stream?

stream 들어보기만 해도 무언가 흐를 거 같은 느낌이 팍팍 든다. 그럼 무엇이 흐를까? 당연히 데이터가 흐른다.
stream을 통해 데이터를 하나씩 흐르게 하고, 메서드 체인 형식으로 필요한 메서드를 사용하면 원하는 값으로 편하게 가공할 수 있다.

람다식으로 요소 처리 코드를 제공하기 때문에 가독성이 좋다.

그냥 반복문을 통해 사용하는 것과 다른 점은 가독성이 좋기 때문에 유지보수에 용이하다. 또 내부 반복자를 사용하기 때문에 병렬 처리가 쉽다.

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);
    }
  }

}
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);
  }

}

내부 반복자를 사용하기 때문에 병렬 처리가 쉽다.

외부 반복자를 처리할 때는 컬렉션의 다음 인덱스를 가져오기 위한 작업이 필요한데, 내부 반복자를 사용하면 개발자는 처리 방식만 정의하면 내부 반복자가 알아서 컬렉션을 순회하며 처리한다.

외부 반복자란 개발자가 직접 코드로 작성하는 반복문인데, 내부 반복자는 컬렉션 내부에서 요소들을 반복시키고, 개발자는 요소당 처리해야 할 코드만 제공하는 코드 패턴을 말한다.

stream은 람다식 요소 처리 내용만 전달하고 반복은 컬렉션 내부에서 일어나기 때문에 병렬 처리가 컬렉션 내부에서 처리되므로 효율적인 병렬 처리가 가능해진다.

중간 처리와 최종 처리

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

공식 문서

stream 메서드 사용 법은 공식 문서에 잘 나와있으니 참조하자.

728x90
Comments