Notice
Recent Posts
Recent Comments
Link
«   2025/10   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

내로그

Java Stream(스트림) 본문

WEB/Java

Java Stream(스트림)

Kotato 2022. 8. 24. 14:16

스트림이란?

- 스트림은 반복자

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

 

List<String> list = Arrays.asList("김씨","박씨","전씨");

// Iterator 이용
Iterator<String> iterator = list.iterator();
while(iterator.hasNext()){
    String name = iterator.next();
    System.out.println(name);
}

// Stream 이용
Stream<String> stream = list.stream();
stream.forEach(System.out::println);

 

스트림 특징

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

- 스트림이 제공하는 대부분의 요소 처리 메소드는 함수적 인터페이스 매개타입을 가진다.

- 매개값으로 람다식 또는 메소드 참조를 대입할 수 있다.

List<Student> list = Arrays.asList(
        new Student("김씨",99),
        new Student("서씨",100)
);

Stream<Student> stream = list.stream();
stream.forEach(student ->{
   String name = student.getName();
   int score = student.getScore();
   System.out.println("학생:"+name+" 점수:"+score);
});

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

- 외부 반복자

개발자가 코트로 직접 컬렉션 요소를 반복해서 요청하고 가져오는 코드패턴 ex) iterator 사용시 while문으로 next()로 요소를 가져옴

 

-내부 반복자

개발자는 요소 처리 코드에만 집중

멀티 코어 CPU를 최대한 활용하기 위해 요소들을 분배시켜 병렬 처리 작업을 할 수있다.

 

- 병렬(parallel) 처리

한가지 작업을 서브 작업으로 나누고, 서브 작업들을 분리된 스레드에서 병렬적으로 처리한 후, 서브 작업들의 결과들을

최종 결합하는 방법

자바는 ForkJoinPool 프레임워크를 이용하여 병렬 처리를 한다.

ForkJoinPool은 하나의 task(처리할일) 을 Fork 로 여개로 나눠서 처리한 후 Join으로 처리결과를 합치고

최종 결과물을 만들어낸다.

 

List<String> list = Arrays.asList("김씨","전씨","강씨","조씨","정씨");

// 순차 처리
Stream<String> stream = list.stream();
stream.forEach( name ->{
    stop(500);
    System.out.println(name+"---"+ print());
});

// 병렬 처리
Stream<String> parallelStream = list.parallelStream();
parallelStream.forEach(name->{
    stop(500);
    System.out.println(name+"---"+ print());
});

순차 처리시 하나의 쓰레드로 처리 하기때문에 하나의 처리시간 * 처리할 작업량 만큼의 시간이 걸린다. ( 처리시간=0.5 * 5 = 2.5초)

병렬 처리시 여러개의 쓰레드로 작업하기 때문에 총 처리 시간이 투입되는 쓰레드가 많을 수록 줄어든다. (처리시간=쓰레드 5개일시 0.5초)

 

 

스트림의 종류

- BaseStream : 모든 스트림에서 사용할 수 있는 공통 메소드들이 정의되어 있음, 코드로 사용되지는 않음

- Stream : 객체 요소를 처리하는 스트림

- IntStrem : int 처리 스트림

- LongStrem : long 처리 스트림

- DoubleStream : double 처리 스트림

 

스트림 구현 객체를 얻는 방법

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

Java Stream(스트림) 중간처리, 최종처리 메소드  (0) 2022.08.25
Java Stream(스트림) 파이프라인  (0) 2022.08.24
람다식(Lambda)  (0) 2022.08.23