동작 파라미터와 람다 In java 8진우 이동작 파라미터와 람다(Java 8 in Action)
자바8 in Action을 읽고 정리해본 내용입니다.
자바8은 함수형 패러다임과 멀티 코어에서의 병렬 처리를 돕는 방향으로 출시되었습니다.
‘자바 8 in Action’ 책을 읽고 ppt로 정리해봤습니다.
어떻게 해서 람다와 메서드 레퍼런스 개념까지 자바8에 도입이 되었는지 설명하는 문서입니다.
주요 키워드
동작 파라미터화(Behavior Parameterization), 값 파라미터화, 익명 클래스, 람다
자바8 람다 나머지 공개Sungchul Park지난 26일(2014/7/26), 지앤선과 KSUG가 함께 진행했던 세미나에서 발표한 람다 관련 내용입니다.
첫 시간에 정대원님이 발표하신 람다 기본에 다루지 않은 내용만 정리했는데 지난 번에 올렸던 자료(http://www.slideshare.net/gyumee/java-8-lambda-35352385)의 후편으로도 볼 수 있을 것 같습니다.
제 발표는 장표만으로 내용을 가늠하기 어려운데 그래도 이번에는 청각 장애인들도 참여한다고 해서 장표에 글자를 많이 넣으려고 했습니다.
씹고 뜯고 맛보고 즐기는 스트림 APIArawn Park스트림 API는 람다 표현식을 적극적으로 활용해서 만들어진 자바의 새로운 API 입니다.
스트림 API를 통해서 자바에서도 맵/리듀스 방식으로 대량의 데이터를 순차 또는 병렬 처리를 할 수 있게 되었는데요, 이번 발표를 통해 스트림 API가 무엇인지- 어떻게 써먹는지에 대해 가볍게 씹고 뜯고 맛보고 즐기셨으면 좋겠습니다. :)
예제코드 : https://github.com/arawn/jdk8-stream-api
Java 8 - New Updates and Why It Matters?CTE Solutions Inc.Java 8 introduced several new features that improved the Java programming language. Key new features included lambda expressions to treat functions as data, improvements to annotations to allow deeper integration with compilation, and default methods to allow interfaces to be extended without breaking existing code. The libraries were also updated with new packages for streams, date-time handling and unsigned integers, improving functionality.
자바8 람다 나머지 공개Sungchul Park지난 26일(2014/7/26), 지앤선과 KSUG가 함께 진행했던 세미나에서 발표한 람다 관련 내용입니다.
첫 시간에 정대원님이 발표하신 람다 기본에 다루지 않은 내용만 정리했는데 지난 번에 올렸던 자료(http://www.slideshare.net/gyumee/java-8-lambda-35352385)의 후편으로도 볼 수 있을 것 같습니다.
제 발표는 장표만으로 내용을 가늠하기 어려운데 그래도 이번에는 청각 장애인들도 참여한다고 해서 장표에 글자를 많이 넣으려고 했습니다.
씹고 뜯고 맛보고 즐기는 스트림 APIArawn Park스트림 API는 람다 표현식을 적극적으로 활용해서 만들어진 자바의 새로운 API 입니다.
스트림 API를 통해서 자바에서도 맵/리듀스 방식으로 대량의 데이터를 순차 또는 병렬 처리를 할 수 있게 되었는데요, 이번 발표를 통해 스트림 API가 무엇인지- 어떻게 써먹는지에 대해 가볍게 씹고 뜯고 맛보고 즐기셨으면 좋겠습니다. :)
예제코드 : https://github.com/arawn/jdk8-stream-api
Java 8 - New Updates and Why It Matters?CTE Solutions Inc.Java 8 introduced several new features that improved the Java programming language. Key new features included lambda expressions to treat functions as data, improvements to annotations to allow deeper integration with compilation, and default methods to allow interfaces to be extended without breaking existing code. The libraries were also updated with new packages for streams, date-time handling and unsigned integers, improving functionality.
Beyond Java: 자바 8을 중심으로 본 자바의 혁신Sungchul ParkBeyond Java discusses Java's innovations centered around Java 8. Key changes included lambda expressions, date/time API improvements, and stream processing. Lambda expressions were added after years of proposals and discussions. Java uses objects to pass behaviors as parameters rather than functions. Collections utilities demonstrate passing comparators to sort or find the minimum/maximum of a collection.
DevOps!! 도데체 왜, 어떻게 할까??Joseph Kim위메프에서 DevOps를 적용하기 위해서 공부하고 경험했던 내용을 정리한 자료입니다. DevOps를 왜 해야 하는 지, 그리고, 정확히 DevOps가 뭔지 이해하기 위해서 DevOps의 유래, CAMS/CALMS, 또, Gene Kim의 The three ways와 Patrick의 4 Areas에 대해서 설명하고 DevOps의 다양한 패턴에 대해서 설명했습니다.
그리고, Facebook, Flickr, Etsy, Netflix, Google에서는 어떻게 개발하고 배포 하는 지 사례를 설명 드리고 마지막엔 위메프에서 1년 동안 DevOps를 적용하기 위해 어떤 노력들을 했는 지 설명하려 노력했습니다.
DevOps를 적용하려 고민하는 분들께 조금이나마 도움이 되었으면 좋겠습니다.
오픈스택: 구석구석 파헤쳐보기Jaehwa Park레드햇의 Etsuji Nakai 씨의 "OpenStack: Inside Out" 한글 번역본입니다.
다시 한번 좋은 문서를 공유해주신 Etsuji Nakai 씨에게 감사를 드립니다.
http://www.slideshare.net/enakai/open-stack-insideoutv10
알파고 (바둑 인공지능)의 작동 원리Shane (Seungwhan) Moon알파고의 작동 원리를 설명한 슬라이드입니다.
English version: http://www.slideshare.net/ShaneSeungwhanMoon/how-alphago-works
- 비전공자 분들을 위한 티저: 바둑 인공지능은 과연 어떻게 만들까요? 딥러닝 딥러닝 하는데 그게 뭘까요? 바둑 인공지능은 또 어디에 쓰일 수 있을까요?
- 전공자 분들을 위한 티저: 알파고의 main components는 재밌게도 CNN (Convolutional Neural Network), 그리고 30년 전부터 유행하던 Reinforcement learning framework와 MCTS (Monte Carlo Tree Search) 정도입니다. 새로울 게 없는 재료들이지만 적절히 활용하는 방법이 신선하네요.
이것이 자바다 Chap.14 람다식 Lambda expression(java)(KOR)MIN SEOK KOO이것이 자바다 Chap.14 람다식 Lambda expression(java) 발표용 PPT
간단하게 정리한 것.
이것이 자바다 책을 기반으로 작성한 강의용 PPT입니다.
부족한 게 많으니 쓰실 때에는 추가하셔서 쓰세요~
참고 자료 : 이것이 자바다
사진 첨부 : http://palpit.tistory.com/
16. Lambda - 문법
람다의 특성
● 익명
○ 보통의 메서드와는 달리 이름이 없다.
● 함수
○ 람다는 메서드처럼 특정 클래스에 종속되지 않는다.
파라미터 리스트, 바디, 반환 형식을 포함한다.
● 전달
○ 람다 표현식을 메서드 인수로 전달하거나 변수로 저장할 수
있다.
● 간결성
○ 익명 클래스처럼 많은 부가 코드를 구현할 필요가 없다.
18. Lambda - 함수형 인터페이스
● 하나의 추상 메서드를 가진 인터페이스만 람다로 사용할 수 있다.
이러한 인터페이스를 함수형 인터페이스라고 한다.
● 인터페이스 내부에 선언된 유일한 메서드에 람다의 몸체가 정의된다.
● 함수형 인터페이스에 디폴트 메서드가 여럿 있더라도,
추상 메서드가 하나라면 함수형 인터페이스이다.
● 어노테이션 @FunctionalInterface를 클래스 상단에 붙여
명시적으로 함수형 인터페이스라는 것을 표기해줄 수 있다.
19. Lambda - 함수형 인터페이스
• 람다는 결과적으로 함수형 인터페이스가 가지는 유일한 메서드가 구현되는 것이다.
(이를 바탕으로 타입 추론이 가능)
• 함수형 인터페이스를 인자로 가지는 게스트 코드 입장에서는 코드가 인스턴스화 되어
인자로 들어오므로 호스트 코드에서 보내는 인스턴스의 정체가 람다인지 익명클래스인
지는 관심이 없다.
• 람다와 익명클래스는 다르다.
– 익명클래스는 컴파일시 서브클래스로 별도의 파일로 컴파일되고 람다는 기존 클래
스에 포함된다.
– 람다는 바이트코드로 변환시 Java7에서 추가된 InvokeDynamic 명령어을 이용하
여 런타임에 코드가 생성된다.
20. Lambda - 함수형 인터페이스
• 함수형 인터페이스를 인자로 받는 메소드에만 람다식을
사용할 수 있다.
– 새로운 함수형을 추가할 경우 언어가 더 복잡해진다.
– 대부분의 자바 프로그래머가 익명클래스 문법에 익숙하다.
• 위와 같은 제약사항으로 인해 람다식의 타입 추론이 가능
해졌다.
– 함수형 인터페이스가 가지고 있는 추상 메소드가 오직 하나 밖에 없으므
로 이를 이용하여 타입 추론
– 람다식의 Prameter 추론 : 추상 메소드의 파라메터 정보
– 람다식의 Return 타입 추론 : 추상 메소드의 리턴 타입 정보
• Java8에서는 java.util.function 패키지로 다양한 함수형 인터페
이스를 제공한다.
21. 디폴트 메서드
default 키워드를 사용하면 인터페이스에 메서드를 바로 설정 가
능
기존의 구현체 구조를 변경하지 않고도 새로운 기능을 추가 할
수 있다.
<Interface>
List
ArrayList
LinkedList
Stack
ArrayList
LinkedList
Stack
23. Predicate<T> T -> boolean
• Java.util.function.Predicate<T>
– 추상메소드 test()를 람다의 바디에서 정의
– T타입을 인수로 받아 Boolean을 리턴
• 입력값 T가 어떤 조건을 충족하는지 여부를 확인하는 메서드
• 어떤것이 사실인지 아닌지를 리턴해주는 람다식이 바디로 정의
Lambda - 기본제공 함수형 인터페이스
25. Consumer<T> T -> void
• Java.util.function.Consumer<T>
– 추상메소드 accept()를 람다의 바디에서 정의
– T타입을 인수로 받고 리턴하지 않음
• 입력값 T를 받아 어떠한 동작을 수행시키는 메서드
• 람다의 바디는 특정 동작을 수행하며 반환값이 없는 형태.
Lambda - 기본제공 함수형 인터페이스
29. Supplier<T> () -> T
• Java.util.function.Supplier<T>
– 추상메소드 get()를 람다의 바디에서 정의
– 인수없이 T 객체를 리턴
• 정해진 T를 공급하는 메서드
• 입력값이 없으며 람다식에 정의된 값을 결과로 반환한다.
Lambda - 기본제공 함수형 인터페이스
31. 람다 표현식 조합
• Java.util.function 패키지에서 제공하는 함수형 인터페이
스 중 일부는 static 메소드 형태의 유틸리티 메소드를 가
지고 있다.
– Predicate
– Function
• 유틸리티 메서드를 조합해서 복잡한 로직을 보다 간결하
게 표현할 수 있다.
Lambda - 기본제공 함수형 인터페이스
43. 요약
● 람다 표현식은 익명클래스를 간결하게 표현할 수 있다.
(약간은 달라요.)
● 함수형 인터페이스는 하나의 추상 메서드만이 정의된 인터페이
스
● 자바에서는 자주 사용되는 기본적인 형태의 함수형 인터페이스
를 제공
● 기본제공되는 함수형 인터페이스는 Boxing을 피할 수 있도록
IntPredicate, IntToLongFunction과 같은 primitive타입의 인터
페이스 제공
● 메서드 레퍼런스를 이용하면 기존의 메서드 구현을 재사용 및 전
달 가능
● Comparator, Predicate, Function 같은 함수형 인터페이스는
람다 표현식을 조합할 수 있는 다양한 디폴트 메서드를 제공