데이터를 수집하기 위한 집합
집계된 데이터를 저장, 검색, 조작, 전달하는 데 사용
인터페이스 | 구현 클래스 | 자료구조의 특징 |
---|---|---|
Set | HashSet, TreeSet | 순서를 유지하지 않는 데이터의 집합으로 데이터의 중복을 허용하지 않는다. |
List | LinkedList, Vector, ArrayList | 순서가 있는 데이터의 집합으로 데이터의 중복을 허용한다. |
Queue | LinkedList, PriorityQueue | 먼저 들어간 자료가 먼저 나오는 구조 FIFO(First In FIrst Out) |
Map | Hashtable, HashMap, TreeMap | 키(Key), 값(Value)의 쌍으로 이루어진 데이터의 집합으로, 순서는 유지되지 않으며 키(Key)의 중복을 허용하지 않으나 값(Value)의 중복은 허용한다. |
JAVA 의 컬렉션 프레임워크라면 대표적으로 List, Set, Map으로 알고 있는데, 위 사진을 보면 알수 있듯 List와 Set은 컬렉션이라는 인터페이스를 상속받지만 Map은 아니다.
Stream은 데이터의 흐름이다.
데이터 소스에서 데이터를 읽고, 처리하고, 출력하는 연산을 수행하는데 사용된다.
컬렉션, 배열 또는 I/O 자원 등 다양한 소스에서 데이터를 다루는 일관된 방법을 제공한다.
자바 8에서 추가한 스트림(Streams
)은 람다를 활용할 수 있는 기술 중 하나.
자바 8 이전에는 배열 또는 컬렉션 인스턴스를 다루는 방법은 for
또는 foreach
문을 돌면서 요소 하나씩을 꺼내서 다루는 방법을 사용했다.
선언형 프로그래밍 방식: 코드를 작성할 때 데이터를 어떻게 처리할지에 대해 명시할 수 있으며, 구체적인 구현 방법은 숨겨짐.
→ 간결하고 가독성있는 코드
내부 반복(internal iteration): 내부 반복을 사용하여 요소를 처리
지연 연산(lazy evaluation):
스트림은 중간 연산(intermediate operations)과 최종 연산(terminal operations)으로 구성.
중간 연산은 스트림을 리턴하며, 최종 연산은 스트림을 사용해 결과를 리턴합니다.
이때, 중간 연산은 지연 연산이 적용되어 최종 연산이 호출되기 전까지 실제로 처리가 이루어지지 않는다.
지연연산 : 결과값이 필요할때까지 계산을 늦추는 기법
상품 목록 불러오는 API
컬렉션의 경우 Interface에 있는 defalut 메소드 stream()
을 이용해 Stream 인스턴스를 생성하였다.
⇒ Stream 파이프라인의 시작
<R> Stream<R> map(Function<? super T, ? extends R> mapper);
.map(productMapper::fromListEntity)
요소 내 들어있는 Products 개체의 정보들을 꺼내온다.
fromListEntity ⇒ 각 Product
객체는 ProductPreViewDto
객체로 매핑한다.
.collect(Collectors.toList())
:
collect()
메서드는 스트림의 요소를 수집하여 새로운 컬렉션으로 반환
Collectors.toList()
스트림의 모든 요소를 리스트에 추가하고, 그 결과로 리스트를 반환
각 페이지의 상품 목록을 처리하기 위해 Java의 List
를 사용
⇒ 스트림에서 요소를 수집하여 리스트로 변환하는 toList()
컬렉터
ArrayList::new
로 새로운 ArrayList 인스턴스를 생성List.add
메서드를 사용하여 요소를 리스트에 추가addAll
메서드를 사용해 병렬 처리 시 실행된 각 부분 결과를 모두 합쳐 하나의 리스트로 생성 productPage
에서 가져온 Product
객체들을 ProductPreViewDto
객체로 매핑하고, 이를 리스트로 수집하여 반환합니다.