1. 스트림은 무엇인가?
스트림은 자바 8 API에 새로 추가된 기능이다.
스트림을 사용하면 다음과 같은 이점이 있다.
- 멀티스레드 코드를 구현하지 않아도 데이터를 투명하게 병렬로 처리할 수 있다.
- 선언형으로 코드를 구현 할 수 있다. 즉, 루프와 if 조건문 등의 제어 블록 없이 원하는 로직을 만들어 낼 수 있다.
- 여러 빌딩 블록 연산을 연결할 수 있다. 예)filter 연산 후 sorted 연산 후 map 연산을 하는 파이프라인을 만들 수 있다.
- 스레드와 락을 걱정할 필요가 없다.
요약: 스트림은 더 간결하고 가독성이 높아지고 유연성이 좋고 성능이 좋다
2. 컬렉션과 스트림
컬렉션과 스트림 사이에는 다음과 같은 차이점이 있다.
컬렉션 | 스트림 | |
데이터를 언제 계산하는지 |
적극적 생산 (현재 자료구조가 포함하는 모든 값을 메모리에 미리 저장) |
게으른 생산 (요청할 때만 요소를 계산) |
외부 반복과 내부 반복 |
외부 반복 (for-each 등을 사용하여 직접 요소를 반복해야한다.) |
내부 반복 (반복을 알아서 처리 해준다.) |
최적화 달성이 어렵다. | 병렬성 구현을 자동적으로 선택한다. |
3. 스트림 연산
스트림 연산은 두 그룹으로 구분할 수 있다.
- 서로 연결되어 파이프라인을 형성한다. => 중간 연산
- 파이프라인을 닫는다. => 최종 연산
중간 연산의 특징
- 쇼트서킷 - 모든 요소에 대해서 연산을 하지 않는다.
- 루프 퓨젼 - 각 요소에 따라 서로 다른 연산이 한 과정으로 병합된다.
반응형
'Java' 카테고리의 다른 글
람다 표현식을 활용한 디자인패턴 - 템플릿 메서드 (0) | 2020.04.08 |
---|---|
람다 표현식을 활용한 디자인패턴 - 전략 패턴 (0) | 2020.04.08 |
스트림 활용 정리 (0) | 2020.04.04 |
Optional (0) | 2020.03.29 |
인터페이스, Interface (0) | 2020.02.17 |