[Modern Java In Action] 1. 자바8,9,10,11 : 무슨 일이 일어나고 있나요?
in Programming on Java
java 8부터 자바에 큰 변화들이 있어왔다. 무슨 변화들이 왜, 어떻게 일어났고 우리는 이걸 어떻게 활용해야하는지 알아보자!
1.1 역사의 흐름
프로그래밍 언어는 시장의 니즈를 충족하지 못하면 도태됨. 자바8에서도 이러한 시장의 흐름때문에 많은 변화가 있었음. 간결한코드, 멀티코어 프로세서의 쉬운활용에 대한 니즈로 요약하자면 아래 3개의 변화가 있었음.
- 스트림 API
- 메서드에 코드를 전달할수 있게됨
- 인터페이스의 디폴트 메서드
1.2 왜 자바는 계속 변할까?
특정분야에 장점을 가진 언어는 다른 경쟁언어를 도태시킴. 자바는 여기에 나름 잘 대응하면서 여태 살아남고있다.
자바는 첨부터 많은 라이브러리를 포함한 잘 설계된 객체지향언어로 좋은 출발을 했었음. (+ 스레드, 락을 지원해서 소소하게 동시성도 지원함) 또 당시 모든 인터넷 브라우저에서 가상머신 코드를 지원했는데, JVM (자바가상머신) 바이트코드로 컴파일하는 자바는 이러한 환경에 찰떡이었기 때문에 인터넷 어플리케이션의 짱의 자리를 지킬수있었음.
근데 이 장점만으로는 험난한 프로그래밍언어 생태계에서 살아남기 어려움. 최근 시장에서는 빅데이터의 대두로인해 병렬프로세싱의 중요성이 커졌는데, 자바8에서는 이에 대응하기 위해 3가지 카드를 내놨음.
- 스트림
- 메서드에 코드전달
- 병렬성
모던 자바 인 액션에서는 이러한 자바의 새로운 변화에 대해 집중해서 다룰 예정.
1.3 자바함수
자바의 또다른 변화중의 하나는, 고전적인 객체지향에서 벗어나 함수형 프로그래밍으로 탈피하고있는것. 사실 둘은 굉장히 상극인 속성을 가지고있는데ㅡ 자바8에서는 함수형 프로그래밍을 도입해서 두 패러다임의 장점을 모두 활용할수 있게됨. (스트림, 람다함수…)
기존의 자바 세상에서 메서드는 파라미터로 활영할 수 있는 변수(=일급값, 일급시민)이 아니었으나, 자바8에서는 일급시민으로 거듭남.
1.4 스트림
컬렉션 데이터를 라이브러리 내부반복으로 처리하는 API. 멀티코어도 쉽게 활용 가능. 데이터 필터링, 추출, 그루핑을 쉽게할 수 있고, 이 동작들을 쉽게 병렬화 할 수 있음.
1.5 디폴트 메서드와 자바모듈
요즘 또 프로그래밍 시장에서 핫한 트렌드 중 하나가 외부 컴포넌트를 이용해 쉽게 시스템을 구축하는거임. 자바는 이걸 외부 라이브러리 jar파일을 포함하는식으로 쓰고있었는데, 이 방식은 해당 라이브러리의 인터페이스를 바꾸고싶으면 해당 인터페이스를 구현하는 모든 클래스의 구현을 바꿔야했음..
자바8, 자바9에서는 패키지모음을 포함하는 모듈을 정의할 수 있고 인터페이스를 쉽게 바꿀 수 있는 디폴트 메서드를 지원함. 클래스에서 구현하지 않아도 되는 메서드를 인터페이스에 추가할 수 있는것.
이 디폴트 메서드를 이용하면 기존의 코드를 건드리지 않고도 원래의 인터페이스 설계를 자유롭게 확장할 수 있다.
1.6 함수형 프로그래밍에서 가져온 다른 아이디어
- nullpointer 예외를 피할수 있게 해주는 Optional 클래스 제공
- 구조적 패턴매칭 기법