링크 : http://www.hanbit.co.kr/ebook/look.html?isbn=9788968486739


Java8이 나온지도 반년이 지났다.

Java7에 비해서 그 변화도 크고 도입해야 할 이유도 확실하기 때문에 많은 관심을 가지고 있다.


현업에서는 아직 8을 이용하지는 않고 있지만, 개인 프로젝트나, 알고리즘을 해결 해야 하는 이슈가 있다면 java-8로 진행한다.


Java에서 중요한 전환점이 될 8 버전에 대해서  국내 서적은 그렇게 많지 않다. 2권 정도...


그 중 한권은 자바8의 핵심임 람다에 대해서만 설명한 책이었고, 

같은 200페이지를 어떤식으로 풀어 나가나 싶어서 이 책을 보게 되었다.

(책의 목차가 매우 다르다 @.@)


1. 번역

번역서이니 만큼 번역에 대해서 애기해볼까 한다.

55페이지부터 계속 등장하는 '원시 특수화'나 61페이지의 '공개된 리소스' 처럼 한글로 된 애매모호한 단어들이 눈에 거슬렸다. 

'원시 타입-primitive type' 처럼 일관성인게 원단어를 첨부해주면 좋았지 않을까 한다.

4.4장에서는 좀 갸웃거렸지만 "8장. 디자인 구조와 원칙"처럼 개념적인 단원에서도 어렵지 않게 읽어 내려 갈 수 있었다. 

뒤로 갈수록 좀 더 이해하기에 편안한 느낌 들었다.  (솔직히 개인적으로 번역에 대해 민감한 편은 아니기도 하다)



2. 다른 한빛의 e북보다 페이지도 많은 편이고 코드량도 많지 않기 때문에  많은 내용이 들어 있다. 단순한 람다의 사용법만을 설명하지 않고

병렬성 이슈와 테스트, 패턴까지 한 번에 언급한점은 마음에 들었다. (보는이에 따라서 찔끔찔끔 이라고 싫어하는 분도 있겠네...)

특히 자바와 뗄수 없는 패턴의 언급은 매우 적절해 보였다. 

람다식을 배운후 어떻게 적용할까, 어떤식으로 적용하는가에 대해 의문점을 가진다면 이 부분의 예제로 충분히 이해를 하리라 생각되어 진다.

(물론 더 좋은것은 github에서 l=java와 함께 검색하는 것이다.)



마지막으로..

javascript나, scala와 같은 기존 람다 개념에 익숙한 언어 개발자라면 높은 장벽은 아니다. 

하지만, 오래된 자바 개발자나 람다 자체가 생소하다면  문법적 학습뿐 아니라 또 다른 학습을 요한다. 그리고 생각의 전환도 좀 필요하고...

쉬운 문법의 설명으로 부터,  중요한 주제들을 한번씩 훑어 있는 이책은

자바8을 처음 접하려는 사람이나, 나같이 이미 사용하고 있는 사람들에게도 또 한번 생각해줄만한 계기가 될 수 있겠다.

(어렵다면 다음 책을 한번 읽고 다시 읽어보면 좋을듯 : http://www.hanbit.co.kr/ebook/look.html?isbn=9788979149678 )


신고

이 단 4강을 위해 제주-서울 당일치기를 감행.. 후회는 없고 가길 잘했다. 이후 
가장빨리만나는자바8 [ http://book.daum.net/detail/book.do?bookid=KOR9788966187270 ] 를 다시 보니 효과가 따따불!

참석후, 메모 형식으로 남긴것을 정리.

1. 세미나 정보

- http://onoffmix.com/event/30656

- 7월 26일(토) 오후 1시 ~ 6시 / 삼성 경암빌딩 2층 (쿠팡)



2. 첫시간) 나의 첫번째 자바8 람다식 - 정대원 (카카오)

* 람다의 필요 : 값이 아닌 행위의 전달을 위해서 필요 ex) Comparator, Runnable
* 람다의 장점 : 일반화된 메소드, 유연한 인터페이스, 코드 중복 제거등
* 자바7 이전에는 Anonymous Class로 행위를 전달했다 ( 그 외에는 방법이 없었다)
* @FunctionalInterface <- 컴파일 체크용 메소드가 1개가 아니면 컴파일 오류(람다를 위해서 필수는 아니다)
* 자바8는 하위호환, 방어적 언어구현에 의해 함수를 구현하지 않고 @FunctionInterface로 람다함수를 이용할 수 있게 했다.
* 람다를 사용하려면 인터페이스가 항상 필요한가? - ㅇ
* 람다를 사용하려면 매번 인터페이스를 만들어야 하나? - X (Function, IntConsumer등 이미 많은 인터페이스를 제공함)
* 메소드래퍼런스
* 변수포획 
 public static void thread(String msg){
    new Thread() -> System.out.println(msg)
  }  
 자기를 만든곳의 변수를 이용할 수 있다. (그 녀석이 사라졌더라도..) 사실 람다의 this는 innerclass와 다르다
* 람다의 등장으로 RowMapper의 템플릿패턴/ Guava Collection 쪽의 코드들이 많이 변경될듯 


3. 두번째) 씹고 뜯고 맛보고 즐기는 스트림API - 박용권(SKP)

* 기존 Collection 과 Stream은 다르다. 
** 외부 반복 - 내부 반복(internal)
** 반복을 통한 생성 - 반복을 통해 연산
** 효율적&직접적 요소 처리 - pipe & filter base
** 메모리에 다 올리고, 유한 사이즈 - 무한 연속 흐름
** 반복적 재사용 가능(메모리 기반이라서) - 재사용 불가(매번 stream을 다시 생성해야함)

* StreamAPI특징
** 반복의내재화
*** 반복 구조는 캡슐화해서 반복에 대해 고민할 필요가 없다.
*** 최적화와 알고리즘 분리 (언어단에서 제공하는 최적화)
*** 결국은 반복흐름을 프레임웍이 제어를 하고, 개발자는 연산만 하는 형태
** 지연 연산 - 필요할때 계산 ( filter, map은 기본 lazy)
** 병렬
*** 동일한 코드로 순차/병렬 연산을 쉽게
*** 스레드 안전하지 않은 컬렉션도 병렬처리 지원( 단, 스트림 안에서 원본을 변경하는 짓은 안된다)

* Stream Interface Stream<T>, IntStream, LongStream, DoubleStream(자바의 프리미티브 타입때문에 4개나 존재)

* 중개 연산자는 각 단계별로 처리한후 넘기는게 아니라 1개체마다 모든 중개 연산자를 처리하는 방식이다.


4. 세번재) 자바8 람다 나머지 이야기 - 박성철(SKP)

   네번째) 자바8, 람다 말고는 뭐가 달라졌을까? - 박성철(SKP)

* Method Reference
** 람다 표현식 대신에 메소드를 참조해서 사용할 수 있다. 클래스(객체)::메소드명 
** @FunctionInterface가 아니라도 '기존'메소드를 람다 표현식 자리에 쓸수 있다!
* this범위
** anonymous class에서 this는 자기 자신을 가르킨다. 그래서 상위 클래스를 참조하려면 그냥method 또는 상위클래스명.method를 써야한다.
** 하지만 람다에서 this는 상위클래스이다.
** list.sort( ()->method );를 실제로 컴파일 하면  private static int lambda$0(int a,b) 와 같은게 생성된다.  람다는 새로운 객체를 만들지는 않는다.
* default method
**  다중 상속 문제의 발생 -> 컴파일 단에서 에러 발생
** 해결1) 새로 구현하면 된다. 해결2) 한쪽을 선택한다 해겨3) 호출 순서를 결정하면 된다.
* 인터페이스에서 static method를 선언할 수 있다    interface StringUtils { static String reverse(String str) { ... } } 
* DateAPI : joda 기반이지만, 가져오지는 않고 새로 만듬
* 동시성 개선 : HashMap등이 빨라지기보단 기본 언어 자체가 빨라져서 같이 빨라진 ㅎ효과
* atomic패키지 
* parameter 정보를 바이트코드에 남길수 있다(-parameters) -> JPA에서 효과 볼수 있을듯
* invokeDyanic을 이용한 나쉬호른



신고


티스토리 툴바