전공 지식/JAVA

Java 7 -> 8 로 달라진 부분

큼큼이 2020. 7. 29. 21:10

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)

(homoefficio.github.io/2016/06/26/for-loop-%EB%A5%BC-Stream-forEach-%EB%A1%9C-%EB%B0%94%EA%BE%B8%EC%A7%80-%EB%A7%90%EC%95%84%EC%95%BC-%ED%95%A0-3%EA%B0%80%EC%A7%80-%EC%9D%B4%EC%9C%A0/)

- 일반적인 원시적 데이터 array 에 대한 loop 문이라면 stream 을 사용 하는 것 보다 foreach 문을 사용 하는 것이 낫다.

Collection 에 대해서도 forEach 가 나을 수 있다.

forEach

Interface

- 상수필드 (public static final)

- 디폴트 메소드 (public default)

- 정적 메소드 (public static void)