오봉이와 함께하는 개발 블로그
Java - Stream의 기본 개념 본문
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
'자바' 카테고리의 다른 글
강한 결합 깨기 (상속 part) - 내 코드가 그렇게 이상한가요? (0) | 2023.11.16 |
---|---|
결합도와 책무 - 내 코드가 그렇게 이상한가요? (1) | 2023.11.14 |
성숙한 클래스 - 내 코드가 그렇게 이상한가요? (0) | 2023.11.12 |
Java - Reflection API (0) | 2022.11.26 |
객체 생성 - 정적 팩토리 메소드 (0) | 2022.09.25 |
Comments