자바 스트림

Dear·2025년 5월 29일

TIL

목록 보기
31/74

💙 스트림

컬렉션(배열 포함)의 저장 요소를 하나씩 참조해서 람다식으로 처리할 수 있도록 해주는 반복자이다.

💙 반복자 스트림

// Iterator 사용
List<String> list = Arrays.asList("신짱구", "신짱아", "흰둥이");
Iterator<String> it = list.iterator();
while(it.hasNext()) {
    String name = it.next();
    System.out.println(name);
}

// Stream 사용
List<String> list2 = Arrays.asList("신짱구", "신짱아", "흰둥이");
Stream<String> stream = list2.stream();
stream.forEach(name -> System.out.println(name));

forEach() 메소드는 Consumer 함수적 인터페이스 타입의 매개값을 가지므로 컬렉션의 요소를 소비할 코드를 람다식으로 기술할 수 있다.

💙 스트림의 특징

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

Stream이 제공하는 대부분의 요소 처리 메소드는 함수적 인터페이스 매개 타입을 가지기 때문에 람다식 또는 메소드 참조를 이용해서 요소 처리 내용을 매개값으로 전달할 수 있다.

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

외부 반복자(external iterator)란 개발자가 코드로 직접 컬렉션의 요소를 반복해서 가져오는 코드 패턴을 말한다. index를 이용하는 for문 그리고 Iterator를 이용하는 while문은 모두 외부 반복자를 이용하는 것이다.

내부 반복자(internal iterator)는 컬렉션 내부에서 요소들을 반복시키고, 개발자는 요소당 처리 해야 할 코드만 제공하는 코드 패턴을 말한다.

내부 반복자의 이점은 컬렉션 내부에서 어떻게 요소를 반복시킬 것인가는 컬렉션에게 맡겨두고, 개발자는 요소 처리 코드에만 집중할 수 있다는 것이다.

내분 반복자는 요소들의 반복 순서를 변경하거나, 멀티 코어 CPU를 최대한 활용하기 위해 요소들을 분배시켜 병렬 작업을 할 수 있게 도와주기 때문에 하나씩 처리하는 순차적 외부 반복자보다는 효율적으로 반복시킬 수 있다.

스트림은 람다식으로 요소 처리 내용만 전달할 뿐, 반복은 컬렉션 내부에서 일어난다.

병렬(parallel) 처리란 한 가지 작업을 서브 작업으로 나누고, 서브 작업들을 분리된 스레드에서 병렬적으로 처리하는 것을 말한다. 서브 작업의 결과를 자동으로 결합해서 최종 결과물을 생성한다.

스트림은 중간 처리와 최종 처리를 할 수 있다.

중간 처리에서는 매핑, 필터링, 정렬을 수행한다.
최종 처리에서는 반복, 카운팅, 평균, 총합 등의 집계 처리를 수행한다.

🤍 회고

스트림은 요즘 자주 사용되는 기능이며, 꼭 익혀야 할 개념이라고 느꼈다. 직접 프로젝트를 만들면서 스트림 없이 동일한 기능을 구현하려고 생각해보니 오히려 더 복잡하고 어려울 것 같았다. 이를 통해 스트림의 편리함과 중요성을 확실히 체감할 수 있었다.

profile
친애하는 개발자

0개의 댓글