일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- scala
- schema registry
- Logstash
- Elk
- 카프카
- springboot
- gradle
- Slick
- avo
- spring-kafka
- Spring
- statestore
- kafkastream
- 한빛미디어
- reactive
- kafka interactive query
- kafkastreams
- enablekafkastreams
- kafka streams
- Elasticsearch
- scala 2.10
- RabbitMQ
- spring-cloud-stream
- Kafka
- coursera
- aws
- 플레이 프레임워크
- play framework
- confluent
- spring-batch
- Today
- Total
b
한국 스프링 사용자 모임과 지앤선이 함께하는 테크니컬 세미나 - 자바 8 이야기 본문
이 단 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을 이용한 나쉬호른