1. Question

StreamCollection은 어떤 차이점이 있는가?

2. Answer

Java의 Stream APICollection 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

  • “모던 자바 인 액션” (저자: 라울-게이브리얼 우르마, 마리오 푸스코, 앨런 마이크로프트)

태그:

카테고리:

업데이트:

댓글남기기