SlideShare a Scribd company logo
1 of 18
Introduction to Java8
자바카페
김흥래
자바8의 주요변화
• 람다 표현식 (Lambda Expression)
• 메서드 레퍼런스 (Method Reference)
• 스트림 (Stream)
• 자바함수 (Function)
• 디폴트 메서드 (Default Method)
• 동작 파라메터화 (Behavior Parameterization)
배경
• 간결한 코드를 위한 개발자들의 Needs
• 멀티코어 CPU 대중화 (하드웨어적)
배경
• 간결한 코드를 위한 개발자들의 Needs
익명클래스를
이용하는 방법
메서드 레퍼런스를
이용하는 방법
배경
• 멀티코어 CPU 대중화 (하드웨어적)
– 기존에는 멀티코어를 활용하기 위해 Thread를 사용했
다.
• Java 1 : Thread, Lock
• Java 5 : Thread Pool, Concurrent Collection
• Java 7 : Fork-Join Framework
– 자바8에서는 병렬처리를 지원하는 Stream API 지원
• 비싼 자원인 Synchronized 키워드를 사용하지 않음
• 병철 처리 코드를 JVM으로 넘김 (추상화)
• parallelStream()
자바 함수
• 자바8에서는 함수를 새로운 값의 형식으로 추가했다.
(함수를 값으로 넘길 수 있다는 의미)
– Primitive Data Type : int, boolean, float
– Reference Data Type : String, new 키워드로 생성한 각종
객체들
– Method (메소드 레퍼런스) : 메소드 블럭의 메모리상 주소
값
– Function (익명함수 or 람다) : 익명함수 블록의 메모리상
주소값
• 람다와 메소드 레퍼런스를 이용하여 스트림의 기능이
구현된다.
메서드 레퍼런스
File 클래스에 isHidden() 메서드가 존재하고 있지
만 복잡하게 FileFilter 클래스로 감싼후 new 키워드
를 이용하여 인스턴스를 만들어 객체로 만든 후 파
라메터로 전달한다.
File 클래스가 가지고 있는 isHidden() 메서드
를 직접 파라메터로 전달한다.
람다 (익명함수)
File 클래스를 이용하여 익명함수를 작성하여
직접 파라메터로 전달한다.
람다 (익명함수)
• 람다 코드가 길어진다면 메서드로 만들고
메서드 레퍼런스로 넘기는 방식으로 구현
하자.
• 예제로 나온 필터와 같은 집합연산은 직접
구현하지 말고 가급적이면 스트림 API를
사용하자.
스트림 (Stream)
• 스트림이란 한번에 한개씩 만들어지는 연
속적인 데이터 항목들의 모임
• 자바8에서는 우리가 하려는 작업을 고수
준으로 추상화해서 일련의 스트림으로 만
들어 처리할 수 있다.
• 스트림 파이프라인을 이용하면 추상화된
병렬처리를 할 수 있다.
스트림 (Stream)
디폴트 메서드
• 기존의 구현을 고치지 않고도 이미 공개된 인터페이스를 변경할 수
있을까?
– Interface의 태생적 한계
• 디폴트 메서드는 특정 메서드 구현을 인터페이스가 포함하는 것
• 자바8에서는 Default 키워드 지원
• 디폴트 메서드를 이용하면 기존의 인터페이스 설계를 자유롭게 확
장할 수 있다.
• 개발자가 디폴트 메서드를 직접 구현할 일은 거의 없어야 한다.
• 디폴트 메서드는 프로그램 구현에 도움을 주는 것이 아니라 미래에
프로그램이 쉽게 변화 할 수 있는 환경을 제공하는 것이다.
• 다중상속?
동작 파라메터화
• 전략 패턴 (Stratege Pattern)
• 알고리즘(전략)을 미리 정의해 둔 다음 런
타임에 알고리즘을 선택하는 패턴
필요한 전략을 런타임에 결정할 수 있다.
그런데 전략을 반드시 클래스로 만들어야 할까?
진짜로 필요한 코드
진짜로 필요한 코드
필요한 전략을 런타임에 결정할 수 있다.
그런데 전략을 반드시 클래스로 만들어야 할까?
진짜 실행에 필요한 알고리즘보다
코드를 보내기 위해 작성된 불필요한 코드량이 더 많다.
알고리즘을 익명 클래스로 변경해 보았지만 불필요한 코드는 여전히 존재한다.
리스트 형식을 Generic으로 추상화하고 알고리즘을 람다식으로 적용.

More Related Content

What's hot

Java8 & Lambda
Java8 & LambdaJava8 & Lambda
Java8 & Lambda기현 황
 
동시성 프로그래밍 하기 좋은 Clojure
동시성 프로그래밍 하기 좋은 Clojure동시성 프로그래밍 하기 좋은 Clojure
동시성 프로그래밍 하기 좋은 ClojureEunmin Kim
 
Lambda 란 무엇인가
Lambda 란 무엇인가Lambda 란 무엇인가
Lambda 란 무엇인가Vong Sik Kong
 
[MLOps KR 행사] MLOps 춘추 전국 시대 정리(210605)
[MLOps KR 행사] MLOps 춘추 전국 시대 정리(210605)[MLOps KR 행사] MLOps 춘추 전국 시대 정리(210605)
[MLOps KR 행사] MLOps 춘추 전국 시대 정리(210605)Seongyun Byeon
 
Concurrent programming 2
Concurrent programming 2Concurrent programming 2
Concurrent programming 2Byeongsu Kang
 
자바8 스트림 API 소개
자바8 스트림 API 소개자바8 스트림 API 소개
자바8 스트림 API 소개beom kyun choi
 
Java 이해하기 쉬운 코드 20210405
Java 이해하기 쉬운 코드 20210405Java 이해하기 쉬운 코드 20210405
Java 이해하기 쉬운 코드 20210405Hyosang Hong
 
세미나 Spring mybatis
세미나 Spring mybatis세미나 Spring mybatis
세미나 Spring mybatisSomang Jeong
 
3주차. stream api advance
3주차. stream api advance 3주차. stream api advance
3주차. stream api advance Sejong Park
 
SLiPP 서비스를 Java에서 Scala로 전환하면서 경험담
SLiPP 서비스를 Java에서 Scala로 전환하면서 경험담SLiPP 서비스를 Java에서 Scala로 전환하면서 경험담
SLiPP 서비스를 Java에서 Scala로 전환하면서 경험담Javajigi Jaesung
 
ECMAScript 6의 새로운 것들!
ECMAScript 6의 새로운 것들!ECMAScript 6의 새로운 것들!
ECMAScript 6의 새로운 것들!WooYoung Cho
 
Spring Scala : 스프링이 스칼라를 만났을 때
Spring Scala : 스프링이 스칼라를 만났을 때Spring Scala : 스프링이 스칼라를 만났을 때
Spring Scala : 스프링이 스칼라를 만났을 때JeongHun Byeon
 
JavaInAction 자바 8
JavaInAction 자바 8JavaInAction 자바 8
JavaInAction 자바 8NBT Inc.
 

What's hot (20)

Java 기초
Java 기초Java 기초
Java 기초
 
Java8 & Lambda
Java8 & LambdaJava8 & Lambda
Java8 & Lambda
 
동시성 프로그래밍 하기 좋은 Clojure
동시성 프로그래밍 하기 좋은 Clojure동시성 프로그래밍 하기 좋은 Clojure
동시성 프로그래밍 하기 좋은 Clojure
 
Express 프레임워크
Express 프레임워크Express 프레임워크
Express 프레임워크
 
Lambda 란 무엇인가
Lambda 란 무엇인가Lambda 란 무엇인가
Lambda 란 무엇인가
 
9 swift 클로저1
9 swift 클로저19 swift 클로저1
9 swift 클로저1
 
[MLOps KR 행사] MLOps 춘추 전국 시대 정리(210605)
[MLOps KR 행사] MLOps 춘추 전국 시대 정리(210605)[MLOps KR 행사] MLOps 춘추 전국 시대 정리(210605)
[MLOps KR 행사] MLOps 춘추 전국 시대 정리(210605)
 
Concurrent programming 2
Concurrent programming 2Concurrent programming 2
Concurrent programming 2
 
Java lambda
Java lambdaJava lambda
Java lambda
 
자바8 스트림 API 소개
자바8 스트림 API 소개자바8 스트림 API 소개
자바8 스트림 API 소개
 
HTTP web server 구현
HTTP web server 구현HTTP web server 구현
HTTP web server 구현
 
Java 이해하기 쉬운 코드 20210405
Java 이해하기 쉬운 코드 20210405Java 이해하기 쉬운 코드 20210405
Java 이해하기 쉬운 코드 20210405
 
4-1. javascript
4-1. javascript4-1. javascript
4-1. javascript
 
세미나 Spring mybatis
세미나 Spring mybatis세미나 Spring mybatis
세미나 Spring mybatis
 
JDK 변천사
JDK 변천사JDK 변천사
JDK 변천사
 
3주차. stream api advance
3주차. stream api advance 3주차. stream api advance
3주차. stream api advance
 
SLiPP 서비스를 Java에서 Scala로 전환하면서 경험담
SLiPP 서비스를 Java에서 Scala로 전환하면서 경험담SLiPP 서비스를 Java에서 Scala로 전환하면서 경험담
SLiPP 서비스를 Java에서 Scala로 전환하면서 경험담
 
ECMAScript 6의 새로운 것들!
ECMAScript 6의 새로운 것들!ECMAScript 6의 새로운 것들!
ECMAScript 6의 새로운 것들!
 
Spring Scala : 스프링이 스칼라를 만났을 때
Spring Scala : 스프링이 스칼라를 만났을 때Spring Scala : 스프링이 스칼라를 만났을 때
Spring Scala : 스프링이 스칼라를 만났을 때
 
JavaInAction 자바 8
JavaInAction 자바 8JavaInAction 자바 8
JavaInAction 자바 8
 

Viewers also liked

씹고 뜯고 맛보고 즐기는 스트림 API
씹고 뜯고 맛보고 즐기는 스트림 API씹고 뜯고 맛보고 즐기는 스트림 API
씹고 뜯고 맛보고 즐기는 스트림 APIArawn Park
 
Spring4 + my batis3 + mariadb (maven) 게시판 예제 1
Spring4 + my batis3  + mariadb (maven) 게시판 예제  1Spring4 + my batis3  + mariadb (maven) 게시판 예제  1
Spring4 + my batis3 + mariadb (maven) 게시판 예제 1HeoJJun
 
Java 자료구조 비교 (Java1.6 기준)
Java 자료구조 비교 (Java1.6 기준)Java 자료구조 비교 (Java1.6 기준)
Java 자료구조 비교 (Java1.6 기준)혜웅 박
 
ORM을 활용할 경우의 설계, 개발 과정
ORM을 활용할 경우의 설계, 개발 과정ORM을 활용할 경우의 설계, 개발 과정
ORM을 활용할 경우의 설계, 개발 과정Javajigi Jaesung
 
자바 8 스트림 API
자바 8 스트림 API자바 8 스트림 API
자바 8 스트림 APINAVER Corp
 
자바8 람다식 소개
자바8 람다식 소개자바8 람다식 소개
자바8 람다식 소개beom kyun choi
 
초보자를 위한 정규 표현식 가이드 (자바스크립트 기준)
초보자를 위한 정규 표현식 가이드 (자바스크립트 기준)초보자를 위한 정규 표현식 가이드 (자바스크립트 기준)
초보자를 위한 정규 표현식 가이드 (자바스크립트 기준)민태 김
 
Realm 코딩카페 - 이종찬
Realm   코딩카페 - 이종찬Realm   코딩카페 - 이종찬
Realm 코딩카페 - 이종찬Lee-Jong-Chan
 

Viewers also liked (8)

씹고 뜯고 맛보고 즐기는 스트림 API
씹고 뜯고 맛보고 즐기는 스트림 API씹고 뜯고 맛보고 즐기는 스트림 API
씹고 뜯고 맛보고 즐기는 스트림 API
 
Spring4 + my batis3 + mariadb (maven) 게시판 예제 1
Spring4 + my batis3  + mariadb (maven) 게시판 예제  1Spring4 + my batis3  + mariadb (maven) 게시판 예제  1
Spring4 + my batis3 + mariadb (maven) 게시판 예제 1
 
Java 자료구조 비교 (Java1.6 기준)
Java 자료구조 비교 (Java1.6 기준)Java 자료구조 비교 (Java1.6 기준)
Java 자료구조 비교 (Java1.6 기준)
 
ORM을 활용할 경우의 설계, 개발 과정
ORM을 활용할 경우의 설계, 개발 과정ORM을 활용할 경우의 설계, 개발 과정
ORM을 활용할 경우의 설계, 개발 과정
 
자바 8 스트림 API
자바 8 스트림 API자바 8 스트림 API
자바 8 스트림 API
 
자바8 람다식 소개
자바8 람다식 소개자바8 람다식 소개
자바8 람다식 소개
 
초보자를 위한 정규 표현식 가이드 (자바스크립트 기준)
초보자를 위한 정규 표현식 가이드 (자바스크립트 기준)초보자를 위한 정규 표현식 가이드 (자바스크립트 기준)
초보자를 위한 정규 표현식 가이드 (자바스크립트 기준)
 
Realm 코딩카페 - 이종찬
Realm   코딩카페 - 이종찬Realm   코딩카페 - 이종찬
Realm 코딩카페 - 이종찬
 

Similar to 1. introduction to java8

Apache Htrace overview (20160520)
Apache Htrace overview (20160520)Apache Htrace overview (20160520)
Apache Htrace overview (20160520)Steve Min
 
C++api디자인 1장
C++api디자인 1장C++api디자인 1장
C++api디자인 1장Jihoon Park
 
3. 마이크로 서비스 아키텍쳐
3. 마이크로 서비스 아키텍쳐3. 마이크로 서비스 아키텍쳐
3. 마이크로 서비스 아키텍쳐Terry Cho
 
Things Happend between JDBC and MySQL
Things Happend between JDBC and MySQLThings Happend between JDBC and MySQL
Things Happend between JDBC and MySQLDataya Nolja
 
자바가 디비와 사귀기 까지 벌어지는 일들
자바가 디비와 사귀기 까지 벌어지는 일들자바가 디비와 사귀기 까지 벌어지는 일들
자바가 디비와 사귀기 까지 벌어지는 일들cho hyun jong
 
[스프링 스터디 3일차] 데이터엑세스기술
[스프링 스터디 3일차] 데이터엑세스기술[스프링 스터디 3일차] 데이터엑세스기술
[스프링 스터디 3일차] 데이터엑세스기술AnselmKim
 
초고속 웹사이트 개발을 위한 Codeigniter PHP Framework
초고속 웹사이트 개발을 위한 Codeigniter PHP Framework초고속 웹사이트 개발을 위한 Codeigniter PHP Framework
초고속 웹사이트 개발을 위한 Codeigniter PHP FrameworkInseok Lee
 
자바 직렬화 (Java serialization)
자바 직렬화 (Java serialization)자바 직렬화 (Java serialization)
자바 직렬화 (Java serialization)중선 곽
 
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해Terry Cho
 
테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)
테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)
테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)SangIn Choung
 
[명우니닷컴]자바 스레드에 대해
[명우니닷컴]자바 스레드에 대해[명우니닷컴]자바 스레드에 대해
[명우니닷컴]자바 스레드에 대해Myeongun Ryu
 
제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기
제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기
제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기NAVER D2
 
서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)수보 김
 
Crawling with AWS Lambda
Crawling with AWS LambdaCrawling with AWS Lambda
Crawling with AWS LambdaSeungho Kim
 
Aws lambda 와 함께 서버리스 서비스 만들기
Aws lambda 와 함께 서버리스 서비스 만들기Aws lambda 와 함께 서버리스 서비스 만들기
Aws lambda 와 함께 서버리스 서비스 만들기Junyoung Sung
 
오픈소스 성능 최적화 보고서 ch07. Infinispan
오픈소스 성능 최적화 보고서 ch07. Infinispan오픈소스 성능 최적화 보고서 ch07. Infinispan
오픈소스 성능 최적화 보고서 ch07. InfinispanHyeonSeok Choi
 
두근두근 ASP.NET 5!
두근두근 ASP.NET 5!두근두근 ASP.NET 5!
두근두근 ASP.NET 5!SangHoon Han
 

Similar to 1. introduction to java8 (20)

Apache Htrace overview (20160520)
Apache Htrace overview (20160520)Apache Htrace overview (20160520)
Apache Htrace overview (20160520)
 
C++api디자인 1장
C++api디자인 1장C++api디자인 1장
C++api디자인 1장
 
3. 마이크로 서비스 아키텍쳐
3. 마이크로 서비스 아키텍쳐3. 마이크로 서비스 아키텍쳐
3. 마이크로 서비스 아키텍쳐
 
Things Happend between JDBC and MySQL
Things Happend between JDBC and MySQLThings Happend between JDBC and MySQL
Things Happend between JDBC and MySQL
 
자바가 디비와 사귀기 까지 벌어지는 일들
자바가 디비와 사귀기 까지 벌어지는 일들자바가 디비와 사귀기 까지 벌어지는 일들
자바가 디비와 사귀기 까지 벌어지는 일들
 
[스프링 스터디 3일차] 데이터엑세스기술
[스프링 스터디 3일차] 데이터엑세스기술[스프링 스터디 3일차] 데이터엑세스기술
[스프링 스터디 3일차] 데이터엑세스기술
 
초고속 웹사이트 개발을 위한 Codeigniter PHP Framework
초고속 웹사이트 개발을 위한 Codeigniter PHP Framework초고속 웹사이트 개발을 위한 Codeigniter PHP Framework
초고속 웹사이트 개발을 위한 Codeigniter PHP Framework
 
java_1장.pptx
java_1장.pptxjava_1장.pptx
java_1장.pptx
 
자바 직렬화 (Java serialization)
자바 직렬화 (Java serialization)자바 직렬화 (Java serialization)
자바 직렬화 (Java serialization)
 
java_1장
java_1장java_1장
java_1장
 
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
 
테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)
테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)
테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)
 
[명우니닷컴]자바 스레드에 대해
[명우니닷컴]자바 스레드에 대해[명우니닷컴]자바 스레드에 대해
[명우니닷컴]자바 스레드에 대해
 
제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기
제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기
제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기
 
서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)
 
java_1장.pptx
java_1장.pptxjava_1장.pptx
java_1장.pptx
 
Crawling with AWS Lambda
Crawling with AWS LambdaCrawling with AWS Lambda
Crawling with AWS Lambda
 
Aws lambda 와 함께 서버리스 서비스 만들기
Aws lambda 와 함께 서버리스 서비스 만들기Aws lambda 와 함께 서버리스 서비스 만들기
Aws lambda 와 함께 서버리스 서비스 만들기
 
오픈소스 성능 최적화 보고서 ch07. Infinispan
오픈소스 성능 최적화 보고서 ch07. Infinispan오픈소스 성능 최적화 보고서 ch07. Infinispan
오픈소스 성능 최적화 보고서 ch07. Infinispan
 
두근두근 ASP.NET 5!
두근두근 ASP.NET 5!두근두근 ASP.NET 5!
두근두근 ASP.NET 5!
 

More from 흥래 김

생초보를 위한 한글 형태소 분석하기
생초보를 위한 한글 형태소 분석하기생초보를 위한 한글 형태소 분석하기
생초보를 위한 한글 형태소 분석하기흥래 김
 
검색엔진과 DB Like 검색의 결과가 다른 이유
검색엔진과 DB Like 검색의 결과가 다른 이유검색엔진과 DB Like 검색의 결과가 다른 이유
검색엔진과 DB Like 검색의 결과가 다른 이유흥래 김
 
Elasticsearch와 Python을 이용하여 맨땅에서 데이터 분석하기
Elasticsearch와 Python을 이용하여 맨땅에서 데이터 분석하기Elasticsearch와 Python을 이용하여 맨땅에서 데이터 분석하기
Elasticsearch와 Python을 이용하여 맨땅에서 데이터 분석하기흥래 김
 
한글 자동완성 구현하기
한글 자동완성 구현하기한글 자동완성 구현하기
한글 자동완성 구현하기흥래 김
 
한글 자모 분석 원리
한글 자모 분석 원리한글 자모 분석 원리
한글 자모 분석 원리흥래 김
 
한글 형태소 분석기 활용하기
한글 형태소 분석기 활용하기한글 형태소 분석기 활용하기
한글 형태소 분석기 활용하기흥래 김
 
엘라스틱서치 클러스터로 수십억 건의 데이터 운영하기
엘라스틱서치 클러스터로 수십억 건의 데이터 운영하기엘라스틱서치 클러스터로 수십억 건의 데이터 운영하기
엘라스틱서치 클러스터로 수십억 건의 데이터 운영하기흥래 김
 
Spring di chapter2
Spring di chapter2Spring di chapter2
Spring di chapter2흥래 김
 
Spring di chapter1
Spring di chapter1Spring di chapter1
Spring di chapter1흥래 김
 
5강 코드효율성
5강 코드효율성5강 코드효율성
5강 코드효율성흥래 김
 
Spring boot와 docker를 이용한 msa
Spring boot와 docker를 이용한 msaSpring boot와 docker를 이용한 msa
Spring boot와 docker를 이용한 msa흥래 김
 
[제14회 JCO 컨퍼런스] 개발자를 위한 서버이중화 by JAVACAFE
[제14회 JCO 컨퍼런스] 개발자를 위한 서버이중화 by JAVACAFE  [제14회 JCO 컨퍼런스] 개발자를 위한 서버이중화 by JAVACAFE
[제14회 JCO 컨퍼런스] 개발자를 위한 서버이중화 by JAVACAFE 흥래 김
 
[DevOn 2013] Dynamic web proxy
[DevOn 2013] Dynamic web proxy[DevOn 2013] Dynamic web proxy
[DevOn 2013] Dynamic web proxy흥래 김
 
Apache http component
Apache http componentApache http component
Apache http component흥래 김
 
플랫폼 통합을 위한 Client Module 개발 & 배포
플랫폼 통합을 위한 Client Module 개발 & 배포플랫폼 통합을 위한 Client Module 개발 & 배포
플랫폼 통합을 위한 Client Module 개발 & 배포흥래 김
 
[JCO 컨퍼런스] 웹사이트 Front-End 성능 최적화
[JCO 컨퍼런스] 웹사이트 Front-End 성능 최적화[JCO 컨퍼런스] 웹사이트 Front-End 성능 최적화
[JCO 컨퍼런스] 웹사이트 Front-End 성능 최적화흥래 김
 
Spring 3.1에서 ehcache 활용 전략
Spring 3.1에서 ehcache 활용 전략Spring 3.1에서 ehcache 활용 전략
Spring 3.1에서 ehcache 활용 전략흥래 김
 
[2012 자바카페 OPEN 세미나] Introduction to google guava
[2012 자바카페 OPEN 세미나] Introduction to google guava[2012 자바카페 OPEN 세미나] Introduction to google guava
[2012 자바카페 OPEN 세미나] Introduction to google guava흥래 김
 

More from 흥래 김 (18)

생초보를 위한 한글 형태소 분석하기
생초보를 위한 한글 형태소 분석하기생초보를 위한 한글 형태소 분석하기
생초보를 위한 한글 형태소 분석하기
 
검색엔진과 DB Like 검색의 결과가 다른 이유
검색엔진과 DB Like 검색의 결과가 다른 이유검색엔진과 DB Like 검색의 결과가 다른 이유
검색엔진과 DB Like 검색의 결과가 다른 이유
 
Elasticsearch와 Python을 이용하여 맨땅에서 데이터 분석하기
Elasticsearch와 Python을 이용하여 맨땅에서 데이터 분석하기Elasticsearch와 Python을 이용하여 맨땅에서 데이터 분석하기
Elasticsearch와 Python을 이용하여 맨땅에서 데이터 분석하기
 
한글 자동완성 구현하기
한글 자동완성 구현하기한글 자동완성 구현하기
한글 자동완성 구현하기
 
한글 자모 분석 원리
한글 자모 분석 원리한글 자모 분석 원리
한글 자모 분석 원리
 
한글 형태소 분석기 활용하기
한글 형태소 분석기 활용하기한글 형태소 분석기 활용하기
한글 형태소 분석기 활용하기
 
엘라스틱서치 클러스터로 수십억 건의 데이터 운영하기
엘라스틱서치 클러스터로 수십억 건의 데이터 운영하기엘라스틱서치 클러스터로 수십억 건의 데이터 운영하기
엘라스틱서치 클러스터로 수십억 건의 데이터 운영하기
 
Spring di chapter2
Spring di chapter2Spring di chapter2
Spring di chapter2
 
Spring di chapter1
Spring di chapter1Spring di chapter1
Spring di chapter1
 
5강 코드효율성
5강 코드효율성5강 코드효율성
5강 코드효율성
 
Spring boot와 docker를 이용한 msa
Spring boot와 docker를 이용한 msaSpring boot와 docker를 이용한 msa
Spring boot와 docker를 이용한 msa
 
[제14회 JCO 컨퍼런스] 개발자를 위한 서버이중화 by JAVACAFE
[제14회 JCO 컨퍼런스] 개발자를 위한 서버이중화 by JAVACAFE  [제14회 JCO 컨퍼런스] 개발자를 위한 서버이중화 by JAVACAFE
[제14회 JCO 컨퍼런스] 개발자를 위한 서버이중화 by JAVACAFE
 
[DevOn 2013] Dynamic web proxy
[DevOn 2013] Dynamic web proxy[DevOn 2013] Dynamic web proxy
[DevOn 2013] Dynamic web proxy
 
Apache http component
Apache http componentApache http component
Apache http component
 
플랫폼 통합을 위한 Client Module 개발 & 배포
플랫폼 통합을 위한 Client Module 개발 & 배포플랫폼 통합을 위한 Client Module 개발 & 배포
플랫폼 통합을 위한 Client Module 개발 & 배포
 
[JCO 컨퍼런스] 웹사이트 Front-End 성능 최적화
[JCO 컨퍼런스] 웹사이트 Front-End 성능 최적화[JCO 컨퍼런스] 웹사이트 Front-End 성능 최적화
[JCO 컨퍼런스] 웹사이트 Front-End 성능 최적화
 
Spring 3.1에서 ehcache 활용 전략
Spring 3.1에서 ehcache 활용 전략Spring 3.1에서 ehcache 활용 전략
Spring 3.1에서 ehcache 활용 전략
 
[2012 자바카페 OPEN 세미나] Introduction to google guava
[2012 자바카페 OPEN 세미나] Introduction to google guava[2012 자바카페 OPEN 세미나] Introduction to google guava
[2012 자바카페 OPEN 세미나] Introduction to google guava
 

1. introduction to java8

  • 2. 자바8의 주요변화 • 람다 표현식 (Lambda Expression) • 메서드 레퍼런스 (Method Reference) • 스트림 (Stream) • 자바함수 (Function) • 디폴트 메서드 (Default Method) • 동작 파라메터화 (Behavior Parameterization)
  • 3. 배경 • 간결한 코드를 위한 개발자들의 Needs • 멀티코어 CPU 대중화 (하드웨어적)
  • 4. 배경 • 간결한 코드를 위한 개발자들의 Needs 익명클래스를 이용하는 방법 메서드 레퍼런스를 이용하는 방법
  • 5. 배경 • 멀티코어 CPU 대중화 (하드웨어적) – 기존에는 멀티코어를 활용하기 위해 Thread를 사용했 다. • Java 1 : Thread, Lock • Java 5 : Thread Pool, Concurrent Collection • Java 7 : Fork-Join Framework – 자바8에서는 병렬처리를 지원하는 Stream API 지원 • 비싼 자원인 Synchronized 키워드를 사용하지 않음 • 병철 처리 코드를 JVM으로 넘김 (추상화) • parallelStream()
  • 6. 자바 함수 • 자바8에서는 함수를 새로운 값의 형식으로 추가했다. (함수를 값으로 넘길 수 있다는 의미) – Primitive Data Type : int, boolean, float – Reference Data Type : String, new 키워드로 생성한 각종 객체들 – Method (메소드 레퍼런스) : 메소드 블럭의 메모리상 주소 값 – Function (익명함수 or 람다) : 익명함수 블록의 메모리상 주소값 • 람다와 메소드 레퍼런스를 이용하여 스트림의 기능이 구현된다.
  • 7. 메서드 레퍼런스 File 클래스에 isHidden() 메서드가 존재하고 있지 만 복잡하게 FileFilter 클래스로 감싼후 new 키워드 를 이용하여 인스턴스를 만들어 객체로 만든 후 파 라메터로 전달한다. File 클래스가 가지고 있는 isHidden() 메서드 를 직접 파라메터로 전달한다.
  • 8. 람다 (익명함수) File 클래스를 이용하여 익명함수를 작성하여 직접 파라메터로 전달한다.
  • 9. 람다 (익명함수) • 람다 코드가 길어진다면 메서드로 만들고 메서드 레퍼런스로 넘기는 방식으로 구현 하자. • 예제로 나온 필터와 같은 집합연산은 직접 구현하지 말고 가급적이면 스트림 API를 사용하자.
  • 10. 스트림 (Stream) • 스트림이란 한번에 한개씩 만들어지는 연 속적인 데이터 항목들의 모임 • 자바8에서는 우리가 하려는 작업을 고수 준으로 추상화해서 일련의 스트림으로 만 들어 처리할 수 있다. • 스트림 파이프라인을 이용하면 추상화된 병렬처리를 할 수 있다.
  • 12. 디폴트 메서드 • 기존의 구현을 고치지 않고도 이미 공개된 인터페이스를 변경할 수 있을까? – Interface의 태생적 한계 • 디폴트 메서드는 특정 메서드 구현을 인터페이스가 포함하는 것 • 자바8에서는 Default 키워드 지원 • 디폴트 메서드를 이용하면 기존의 인터페이스 설계를 자유롭게 확 장할 수 있다. • 개발자가 디폴트 메서드를 직접 구현할 일은 거의 없어야 한다. • 디폴트 메서드는 프로그램 구현에 도움을 주는 것이 아니라 미래에 프로그램이 쉽게 변화 할 수 있는 환경을 제공하는 것이다. • 다중상속?
  • 13. 동작 파라메터화 • 전략 패턴 (Stratege Pattern) • 알고리즘(전략)을 미리 정의해 둔 다음 런 타임에 알고리즘을 선택하는 패턴
  • 14.
  • 15. 필요한 전략을 런타임에 결정할 수 있다. 그런데 전략을 반드시 클래스로 만들어야 할까?
  • 16. 진짜로 필요한 코드 진짜로 필요한 코드 필요한 전략을 런타임에 결정할 수 있다. 그런데 전략을 반드시 클래스로 만들어야 할까? 진짜 실행에 필요한 알고리즘보다 코드를 보내기 위해 작성된 불필요한 코드량이 더 많다.
  • 17. 알고리즘을 익명 클래스로 변경해 보았지만 불필요한 코드는 여전히 존재한다.
  • 18. 리스트 형식을 Generic으로 추상화하고 알고리즘을 람다식으로 적용.