해당 글은 필자가 스트림을 복습한 후 내용을 정리하고자 작성한 글입니다
public static void main(String args[]){
List<List<Integer> students> = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9);
for (List<Integer> numberList : numberDoubleList) {
for(Integer number : numberList) {
System.out.println(number);
}
}
}
해당코드의 문제점이 뭘까요??
이 코드는, 중첩 리스트안의 Integer
객체를 for each
문을 통해 꺼내와서 출력하는 구문입니다.
지금은 출력만 하니 코드가 바로 읽히지만, 만약 코드가 더 추가되면, 중첩 for 문으로 인하여 가독성이 떨어질 수도 있죠.
Stream 은 방금 말한 문제점들을 해결해줍니다. 이전의 그 코드를 다음과같이 축약할 수 있죠!
public static void main(String[] args) {
List<Integer> students = IntStream.range(1, 10).boxed().collect(Collectors.toList());
students.forEach(System.out::println);
}
자바의 Stream 기술 을 사용하여 이전 코드에 비해 훨씬 줄어든 코드를 짠 모습을 볼 수 있습니다.
이렇듯, 스트림을 잘만 사용하면 이전보다 훨씬 가독성이 좋은 코드를 작성할 수 있는데요.
가독성도 늘여주고 우리의 할일도 줄여주는 팔방미인 Stream, 지금부터 알아봅시다!
스트림은 자바 8버전에서 추가된 람다 활용 기술 중 하나입니다. 자바 8 이전에는 for
이나 for each
를 통하여, 배열과 컬렉션의 요소를 하나씩 꺼내어 다루었는데요. 로직이 복잡해지면 복잡해질수록, 코드의 양은 기하급수적으로 늘어나게되었죠.
처음에는 메서드를 나누는 방법으로 해결하려하였지만, 이 또한 근본적인 해결책은 아니었습니다.
이를 해결하기 위해 나온 스트림은 바로 "데이터의 흐름" 을 제어하는 기술입니다. 배열이나 컬렉션 안의 데이터들을 여러 함수들을 통하여 효율적으로 가공할 수 있었죠.
또한 스프링은 for each 처럼 직렬적인 처리방식이아니라, 병렬적 처리 (멀티 쓰레딩)가 가능합니다. 하나의 데이터를 가공할때, 이를 여러 작업으로 잘게 나누어 최대한 빨리 작업을 처리 할 수 있죠!
스트림은 다음 3가지의 기술로 나눌 수 있는데요.
보통은 이러한 기술들은 다음과 같은 과정을 거쳐 활용합니다.
스트림 생성하기 -> 스트림 맵핑하기 -> 스트림 필터링하기(반복) -> 결과 만들기 -> 결과 산출하기
일단 가공할 정보에 대한, 스트림을 생성하고, 이를 맵핑한다음 필터링 작업을 통해 원하는대로 정보를 가공한뒤, 이에대한 결과를 만들어 산출합니다.
다음시간부턴 스트림을 생성하는법부터, 결과를 만들어내기까지, 방금말한 이 과정들을
실제 코드를 통해 살펴보도록하겠습니다!
다들 다음에만나요😆