스트림(Stream)
스트림이란 배열이나 컬렉션의 요소들을 하나씩 참조하여 람다식으로 처리할 수 있게 해주는 반복자이다.
스트림의 장점
- 선언형 프로그래밍: 쉽고 직관적인 코드
- 병렬처리: 성능 개선
- 통합된 데이터 처리
스트림 이전에는 배열이나 컬렉션의 요소를 다루는 방법은 for문 또는 Iterator등을 이용하는 것이있었다.
이는 코드가 길고 복잡해질 수 있다는 단점이 존재한다.
스트림은 선언형 프로그래밍 방식으로 데이터를 처리할 수 있어서 보다 직관적인 코드를 작성할 수 있다.
더보기
선언형 프로그래밍: "무엇"에 초점을 둔다. 동작원리를 모르더라도 코드의 역할에 대해 직관적으로 이해할 수 있다.
명령형 프로그래밍: "어떻게"에 초점을 둔다. 코드의 동작원리를 이해하고 내부에서 어떻게 돌아가는지 이해하여야한다.
또 병렬 처리를 별도의 멀티스레드 구현없이 구현할 수 있다. (parallel 메서드 사용)
이전 방식을 사용하면 데이터종류에 따라서 다른 메서드를 쓰는 경우가 있다.
예를들어 정렬을 한다고 했을 때 배열의 경우는 Arrays.sort()를 사용하고 List의 경우는 Collections.sort()를 사용한다.
스트림을 사용하면 이렇게 따로 메서드를 사용하지 않아도 된다.
스트림의 특징
- 람다식을 사용하여 코드가 간결해진다.
- 내부반복자를 사용하여 병렬처리가 쉽다.
더보기외부반복자: for문이나 Iterator 처럼 index를 통해 요소를 가져와서 처리하는 방식
내부반복자: collection 내부에서 요소를 반복시켜 처리하는 방식 - 연산처리 파이프라인이 존재한다.
- 생성 연산
- 중간 연산: 필터링, 매핑, 정렬 등...
- 최종 연산: 총합, 평균, 카운팅, 매 등... - 일회용이므로 재사용이 불가능하다.
- 원본 데이터를 변경하지 않는다. (read-only)
필요에 따라 결과를 따로 반환시킬 수 있다.
사용 예시
List<Member> list=Arrays.asList(
new Member("짱구",Member.MALE,5),
new Member("영희",Member.FEMALE,5),
new Member("짱아",Member.FEMALE,1),
new Member("코난",Member.MALE,7));
double ageAvg=list.stream() // 생성연산
.filter(m->m.getGender()==Member.MALE) // 중간 연산
.mapToInt(Member::getAge) // 중간 연산
.average() // 최종 연산
.getAsDouble();
'공부 일지 > 프로그래밍 언어' 카테고리의 다른 글
Spring AOP (0) | 2023.03.23 |
---|---|
[JAVA] 가비지 컬렉션(Garbage Collection) (3) | 2023.03.17 |
[JAVA] 람다식(Lambda Expression) (0) | 2023.01.12 |
[JAVA] 컬렉션 프레임워크 (0) | 2023.01.11 |
[JAVA] 열거형 / 제너릭 (0) | 2023.01.10 |