[Java] Stream VS Collection
1. Question
Stream
과 Collection
은 어떤 차이점이 있는가?
2. Answer
Java의 Stream API
와 Collection Framework
모두 연속된 요소 형식의 값을 저장하는 자료구조의 인터페이스를 제공한다. 각각 특정 상황과 요구에 맞게 설계된 이들의 주요 차이점은 다음과 같다.
-
Collection Framework
는 데이터의 구조화, 저장, 관리에 초점을 맞추며, 데이터 구조 자체를 직접적으로 조작한다. 컬렉션은 적극적으로 생성되며, 요소의 추가, 삭제, 검색, 수정과 같은 연산을 즉시 수행한다. -
Stream API
는 복잡한 데이터 처리와 대량의 데이터를 효율적으로 처리하는 데 유리하다. 스트림은 데이터를 저장하지 않으며, 대신 데이터 소스로부터 요소를 요청할 때만 처리하고 계산한다. 이는 지연 평가를 통해 성능을 최적화할 수 있게 해준다.
두 방식은 서로 보완적으로 작동할 수 있으며, 상황에 따라 적절한 선택이 중요하다. 컬렉션은 구체적인 데이터 조작과 접근에 강점을 보이고, 스트림은 높은 수준의 추상화와 처리 효율을 제공한다.
3. Detail
A. 데이터 저장 방식
-
Collection: 실제 데이터를 메모리에 저장한다. 데이터의 추가, 삭제, 검색, 수정 등을 위한 메서드를 제공한다.
-
Stream: 데이터를 저장하지 않는다. 대신, 컬렉션, 배열, I/O 채널 등의 데이터 소스로부터 데이터를 읽고, 함수형 프로그래밍 기법을 사용해 데이터를 처리한다.
B. 작업의 명시성과 실행 시점
-
Collection: 즉시 실행된다. 즉, 메서드를 호출하는 순간 작업이 수행된다.
-
Stream: 대부분의 스트림 연산은 지연 실행된다. 연산이 정의되는 시점과 실제 실행되는 시점이 다를 수 있다. 최종 연산(
collect
,reduce
등)이 호출될 때 비로소 모든 처리가 실행된다.
C. 사용 목적 및 효율성
-
Collection: 데이터의 집합을 관리하고, 여러 데이터 항목에 대해 구조적인 접근을 제공하는 데 중점을 둔다.
-
Stream: 데이터 컬렉션을 선언적으로 처리하며, 필터링, 변환, 정렬, 그룹화 등 복잡한 계산을 위한 효율적인 방법을 제공한다. 특히, 병렬 처리를 통해 대량의 데이터 처리에 있어 성능을 향상시킬 수 있다.
D. 재사용성
-
Collection: 컬렉션은 재사용이 가능하다. 한 번 생성하면 여러 번 반복해서 사용할 수 있다.
-
Stream: 스트림은 단 한 번만 사용할 수 있다. 스트림 연산을 완료하고 나면, 해당 스트림은 소비되어 다시 사용할 수 없다.
E. 변경성
-
Collection: 컬렉션의 요소는 추가, 삭제, 수정이 가능하다.
-
Stream: 스트림은 기본적으로 데이터를 변경하지 않는 방식으로 처리한다. 스트림은 데이터를 읽기만 하고, 데이터 소스를 변경하지 않는 읽기 전용 처리를 선호한다.
F. 외부 반복 vs 내부 반복
4. Reference
- “모던 자바 인 액션” (저자: 라울-게이브리얼 우르마, 마리오 푸스코, 앨런 마이크로프트)
댓글남기기