[20210528] Java 8
Java in action 을 읽고 전체적인 java version 8 의 기능들을 소개한다.
java 8 에서 많은 변화가 있었다. 그 중 가장 큰 변화는 단일 코어만 사용(그래서 다중 처리를 위해서 멀티 쓰레드 기법을 사용해야만 했다.)하던 전과 달리 멀티 코어를 사용할 수 있다. 그리고 간결한 코드를 위한 기법들(스트림, 람다)이 추가 되었다.
자바 함수
- 메서드와 람다를 이급 시민에서 일급 시민으로 만들었다. 그래서 함수의 파라미터로 메서드를 제공할 수도 있다.
스트림
- 스트림을 사용하면 컬렉션을 활용했을 때와 비교해서 간결하게 코드를 작성할 수 있다.
- 외부 반복이 아닌 내부 반복으로 처리할 수 있다.
- 컬렉션을 사용할 때는 단일 코어를 사용하는 반면, 스트림은 멀티 코어로 병렬로 작업을 수행할 수 있다.
- 스트림을 병렬로 실행하게 되면 처리해야 하는 리스트를 CPU의 갯수 만큼 나누고 각자 처리(forking step)해서 나온 여러 결과를 합치는 식으로 진행한다.
- 컬렉션은 데이터를 어떻게 저장하고 접근할지에 중점을 두는 반면, 스트림은 데이터에 어떤 계산을 할 것인지 묘사하는 것에 중점을 둔다는 점이 다르다.(그래서 가독성이 좋다 짧기도 하고)
- 컬렉션을 기존의 방식으로 처리하는 것 보다 컬렉션을 스트림으로 바꾸고, 병렬로 처리한 다음, 리스트로 다시 복원하는 것이 더 빠르다.
디폴트 메서드
- 인터페이스를 변경하는 것은 쉽지 않다. 왜냐면 인터페이스를 구현하는 모든 클래스는 인터페이스에서 변경된 점을 적용해야 하기 때문
- default 예약어를 사용하면 인터페이스에서 메서드를 정의할 수 있게 된다.
- 라이브러리 설계자가 더 쉽게 변화할 수 있는 인터페이스를 만들 수 있다.
- 하지만 다중 상속과 유사한 문제가 발생할 수 있다.(다이아몬드 상속 문제)
Optional
- NullPointer 예외를 피할 수 있도록 도와주는 Optional
클래스를 제공한다. - Optional은 값을 갖거나 갖지 않을 수 있는 컨테이너 객체이다.
- 값의 여부에 따라 처리할 수 있는 로직을 가진다.
패턴매칭
- switch를 확장한 구조를 사용할 수 있다.
- 데이터 형식 분류와 분석을 한 번에 수행할 수 있다.
출처
java in action(서적)