컬렉션과 컬렉션 스트림
컬렉션
- 다수의 객체들을 저장한 집합 구조체 입니다.
- List: 저장하는 순서가 존재하며 Index를 사용해 구분합니다. ArrayList,Linked List 등이 있으며 모든 객체들이 개념적으로 순차되어져 있지만 Linked List의 경우 실질적으로 주소를 사용해 랜덤적으로 저장되어져 있습니다.
- Set : 요소들이 순서와 Index를 가지지 않고 객체 자신의 값을 키 값으로 사용하기 때문에 중복된 값을 넣을 수 없습니다. 요소 전체에 대해 어떤 행위를 수행하고자 할 때 외부반복자를 사용합니다.
- Map : 키값을 별도로 사용하여 저장하며 키와 Value 쌍으로 이루어진 엔트리를 집합 자료로 사용합니다. 그 중 Properties의 경우 키와 Value의 값을 모두 String으로 사용하며 리소스로 많이 사용합니다.
- Set과 Map의 객체 검증의 경우 hashCode()와 equals() 메서드를 재사용하여 사용합니다.
- 이진트리 : 참여 노드들이 sorting되어 트리를 구성하고 이진 검색이 가능한 트리입니다.
- 스택 : 스택 탑에서 push(),pop()등을 처리하는 LIFO 컬렉션입니다.
- 큐 : offer(), peak() 등을 수행하는 FIFO 컬렉션입니다.
컬렉션 스트림
- 모든 요소들에 대해 내부 반복자를 사용해 람다식으로 다룰 수 있는 흐름을 구현한 것입니다.
- 내부 반복자를 사용해 람다식으로 처리하여 코드 표현이 간단하고 스트림 객체만 얻으면 자동으로 처리해 줍니다.
- 중간처리와 최종처리가 있으며 중간처리는 스트림 객체를 반환합니다. " . " 연산자를 사용해 연속적으로 표현할 수 있으며 최종 처리가 수행되지 않으면 중간 처리도 수행되지 않는 특성이 있습니다.
- 스트림은 BaseStream을 상속하는 다양한 스트림이 존재합니다.
- 다양한 집합 자료로 부터 스트림 객체를 구할 수 있습니다.
- 리덕션을 위해 중간처리와 최정처리 메서드를 제공합니다.
- 중간처리메서드 : 필터링, 매핑, 정렬, 루핑(peek)
- 최종처리 메서드 : 매칭, 집계, 루핑(forEach),수집(스트림이 다루는 요소들을 다시 컬렉션에 담는 행위)
Optional 객체
- 집계 메서드 중 count(),sum()을 제외하면 모두 Optional 객체를 리턴합니다.
- Optional 객체는 최종 처리에서 반환되는 객체이며 집계값을 저장하는 것 뿐만 아니라 존재 하지 않을 경우 디폴트 값을 설정하여 사용할 수 있습니다.
- 집계 결과 값을 사용해 임의의 작업을 수행하는 Consumer 객체를 설정할 수 있습니다.