728x90

자바 8은 데이터베이스 질의 언어에서 표현식을 처리하는 것처럼 병렬 연산을 지원하는 스트림이라는 새로운 API 를 제공한다. 데이터베이스 질의 언어에서 고수준 언어로 원하는 동작을 표현하면, 구현(자바에서는 스트림 라이브러리가 이 역할을 수행) 에서 최적의 저수준 실행 방법을 선택하는 방식으로 동작한다. 즉, 스트림을 이용하면 에러를 자주 일이키며 멀티코어 CPU 를 이용하는 것보다 비용이 훨씬 비싼 키워드 synchronized를 사용하지 않아도 된다. 

더보기

멀티코어 CPU의 각 코어는 별도의 캐시(빠른 메모리) 를 포함하고 있다. 락을 사용하면 이러한 캐시가 동기화되어야 하므로 속도가 느린 캐시 일관성 프로토콜 인터코어 통신이 이루어진다.

 

조금 다른 관점에서 보면 결국 자바8에 추가된 스트림 API 덕분에 다른 두 가지 기능, 즉 메서드에 코드를 전달하는 간결 기법(메서드 참조와 람다) 과 인터페이스의 디폴트 메서드가 존재 할 수 있음을 알 수 있다. 

 

하지만 스트림 API 때문에 메서드에 코드를 전달하는 기법이 생겼다고 추리하는 것은 메서드에 코드를 전달하는 기법의 활용성을 제한할 수 있는 위험한 생각이다. 

메서드에 코드를 전달하는 기법을 이용하면 새롭고 간결한 방식으로 동작 파라미터화를 구현할 수 있다. 

 

예시 ) 약간만 다른 두 메서드가 있다고 가정하자. 이때 두 메서드를 그대로 유지하는 것보다는 인수를 이용해서 다른 동작을 하도록 하나의 메서드로 합치는 것이 바람직할 수 있다(그러면 복사 및 붙여넣기를 하는 기법에 비해 프로그램이 짧고 간결해지며, 불필요한 에러도 줄일 수 있다.) 조금 경험이 있는 프로그래머라면 자바 8 이전 상황에서는 익명 클래스를 이용해서 동작 파라미터화를 구현할 수 있다고 생각 할 것이다. 

 

메서드에 코드를 전달(뿐만 아니라 결과를 반환하고 다른 자료구조로 전달할 수도 있음) 하는 자바 8 기법은 함수형 프로그래밍에서 위력을 발휘한다. 코드를 전달하거나 조합해서 자바의 강력한 프로그래밍 도구로 활용할 수 있다는 것을 이 책 전반에서 확인할 수 있다. 

 

1.1 절 : 자바가 멀티코어 병렬설(기존의 자바에서 부족했던 특성) 을 더 쉽게 이용할 수 있도록 진화하는 과정과 관련 개념을 설명한다. 

1.2절  : 자바 8에서 제공하는 코드를 메서드로 전달하는 기법이 어떻게 강력한 새로운 프로그래밍 도구가 될 수 있는지 설명한다. 

1.3절 : 스트림 API (병렬형 데이터를 표현하고 이들 데이터를 병렬로 처리할 수 있음을 유연하게 보여주는)가 어째서 강력하고 새로운 프로그래밍 도구인지 설명한다.

1.4절 : 디폴트 메서드라는 새로운 자바 8의 기능을 인터페이스, 라이브러리의 간결셩 유지 및 재컴파일을 줄이는 데 어떻게 활용할 수 있는지 설명한다. 

1.5절 : JVM을 구성하는 자바 및 기타 언어에서 함수형 프로그래밍이라는 존재가 어떤 영향을 미치는지 제시한다. 

 


스트림 처리

스트림이란 한번에  한 개씩 만들어지는 연속적인 데이터 항목들의 모임이다. 이론적으로 프로그램은 입력 스트림에서 데이터를 한 개씩 읽어 들이며 마찬가지로 출력 스트림으로 데이터를 한 개씩 기록한다. 즉, 어떤 프로그램의 출력 스트림은 다른 프로그램의 입력 스트림이 될 수 있다. 

728x90
728x90

안녕하세요, 늘 부족하고 배움을 갈구하는  2년차 백엔드 개발자 던킨 입니다. 

오늘 Modern Java in Action 책을 사고 읽으면서 좋은 내용들이 많아 리뷰를 하려고합니다.

많은 개발자 분들이 이미 이 책에 관련해서 리뷰와 함께 많은 리소스를 공유 해주었다고 해도 과언이 아니지만, 저 또한 이 책에 푹 빠져있는 독자로써

또한, 제 블로그를 찾아오시는분들을 위해 짧게 나마 잘 정리 해서 공유드리고 싶어 리뷰를 시작했습니다.  

 

 


'함수형 프로그래밍은 뭔가요?'

- 함수형 프로그래밍은 프로그래밍 기법을 지칭한다. 함수형 프로그래밍에서는 함수를 값으로 취급한다.

자바 8의 놀라운 점은 함수형 프로그래밍의 여러 장점을 친숙한 자바 문법으로 접목했다는 것이다. 훌룡한 자바 8의 설계 덕분에 함수형 프로그래밍을 자바 8에 새로 추가된 디자인 패턴 처럼 사용할 수 있으며 짧은 시간에 더 명확하고 간결한 코드를 구현할 수 있다. 프로그래밍 무기창고에 더  넓은 영역을 커버하는 무기가 추가되었다고 생각하면됩니다.

 

자바 8에 새롭게 추가된 핵심 기능뿐만 아니라 디폴트 메서드, 새로운 Optional 클래스, CompletableFuture, 새로운 날짜와 시간 API 등 유용한 기능도 설명한다.

 

자바 9에서는 새로운 모듈 시스템, Flow API 를 통한 리액티브 프로그래밍 지원 및 다양한 개선 기능이 추가되었다.

 

 

이 책은 크게 '기초', '함수형 데이터 처리', '스트림과 람다를 이용한 효과적 프로그래밍', '매일 자바와 함께', '개선된 자바 동시성', '함수형 프로그래밍과 자바의 미래' 여섯가지 내용으로 구성되었습니다. 

 

천천히 업로드 하면서 올릴 예정입니다.

아마 많은 SI 회사들은 아직 자바 8을 많이 사용한다고 알고있습니다.

대부분의 서비스 회사들은 자바 11과 스프링부트를 사용한다고 들었습니다(?? 맞는 정보인거죠?)

 

저는 금융권 관련해서 솔루션회사에서 업무를 진행하고 있으며 자바 8을 사용중에 있습니다.

저 같은 아직 신입은 이 책이 더더욱 중요하게 다가왔습니다. 혹시나 내가 이 책으로 인해서 회사에서 저의 코드가 조금 더 가치가 생길 수 있다 라는 희망을 품으면서 이 책을 읽고 있습니다.

 

 

728x90

+ Recent posts