Java 7 -> 8 로 달라진 부분
Lamda
식별자 없이 실행할 수 있는 익명함수 이다.
장점
- 객체를 생성하지 않아도 메소드를 사용 할 수 있다.
- 불필요한 코드를 줄여준다.
- 작성된 코드의 가독성을 높일 수 있다.
단점
- 재귀 식의 호출이 까다롭다.
Stream
- 데이터 소스를 변경하지 않는다. 읽기만 할 뿐 변경하지 않음
- 모두 읽고 나면 다시 사용 할 수 없다. 필요하면 재생성해야함
- Parallel 을 사용하면 내부적으로 fork & join 을 사용하여 자동으로 연산을 병렬로 수행한다.
- 중간 연산 / 최종 연산으로 분류 할 수 있다.
중간 연산
- 스트림으로 반환하기 때문에 중간 연산을 연속해서 연결 할 수 있다. (map, flatMap)
** flatMap
- stream 의 요소가 배열이거나 map 의 연산 결과가 배열인 경우 flatMap 을 사용해서 Stream<T[]> -> Strea<> 으로 변경 가능하다/
최종 연산
- 스트림 요소를 소모하면서 연산 수행을 하므로 단 1번만 연산이 가능하다. (reduce, collect)
stream 을 사용 했을 때 문제점
(jaxenter.com/java-performance-tutorial-how-fast-are-the-java-8-streams-118830.html)
- 일반적인 원시적 데이터 array 에 대한 loop 문이라면 stream 을 사용 하는 것 보다 foreach 문을 사용 하는 것이 낫다.
Collection 에 대해서도 forEach 가 나을 수 있다.
forEach
Interface
- 상수필드 (public static final)
- 디폴트 메소드 (public default)
- 정적 메소드 (public static void)