SlideShare a Scribd company logo
1 of 23
자바 8
한신
주요 특징
• 람다식(Lambda Expression)
• 스트림(Stream) API
• 기본 메서드(Default Method)
• 자바스크립트 엔진 -> Nashorn
• 날짜 API 변경(JSR 310)
• 동시성 API 개선
• IO/NIO 확장
• 제너릭 타입의 생략가능
함수형 프로그래밍
• 함수형 프로그래밍은 대입문 없이 프로그래밍 하는 것?
• Clojure
(take 25 (squares-of (integers)))
• 참조 투명성
• 멀티코어
• 동시성
• 변수 X
람다식(Lambda Expression)
• 함수를 변수에 할당, 인자로 넘길수 있는 표기법
• 익명메서드
• 문법
람다 매개변수 -> 람다 본문
• 함수형 인터페이스(Functional Interface)
메서드가 하나뿐인 인터페이스
• Java.util.function 에 범용으로 쓸수있는 다양한 인터페이스가 준비되어있
다.
람다식 기본문법
• (타입 매개변수, …) -> {실행문; …}
• 매개 변수의 이름은 자유
• 매개 변수의 타입은 생략할 수 도 있다.
• 하나의 매개 변수 () 생략가능, 하나의 실행문 {} 생략가능
• 매개변수가 없다면 ()를 반드시 사용해야한다.
• {} 를 사용하고 결과값을 리턴해야 하는 경우 return 작성
람다식
• (int x, int y) -> { return x + y; }
• (x, y) -> x + y
• x -> x * x
• (x, y) -> { return x + y; }
• x -> { System.out.println(x); }
• () -> { System.out.println(“안녕하세요”); }
함수형 인터페이스
• 추상 메서드가 1개인 인터페이스
public interface Comparator<T>{
int compare(T o1, T o2)
}
Comparator<Long> comp = (Long o1, Long o2)
-> o2 – o1 < 0 ? -1 : 1
함수형 인터페이스
• @FunctionalInterface 어노테이션
두개 이상의 추상메소드가 선언되지 않도록 컴파일러가 강제
• 실수로 두 이상의 추상메소드를 선언하는걸 방지
• @FunctionalInterface
public interface MyFunctionalInterface {
public void method1();
public void method2(); // 오류!!
}
함수형 인터페이스 와 대상 타입
• 람다식은 인터페이스 변수에 대입 즉,
람다식은 인터페이스의 익명 구현 객체를 생성한다는 뜻
• @FunctionalInterface
public interface MyFunctionalInterface3 {
public void method();
}
• FunctionalInterface myFunction = () -> { System.out.print(“작동!”); }
• myFunction.method();
클래스 멤버 변수 와 로컬 변수
• 클래스의 멤버(필드와 메소드) 및 로컬 변수 사용가능
• 람다식에서 this는 내부적으로 생성되는
익명 객체의 참조가 아니라 람다식을 실행한 객체의 참조
• 로컬 변수의 사용에는 제약 사항이 따름
메소드의 매개 변수 또는 로컬 변수를 사용하면
이 두 변수는 final 특성을 가져야한다.
인터페이스의 변화
• 기본 메서드(Default Method)
• 인터페이스에 구현된 메서드를 작성하여 오버라이드 하지않아도 기본 구현물 제공
• 하위호환성 문제 해결
• 정적 메서드의 추가 가능
• public interface myInterface{
public abstract void run();
public default void defaultStop(){
System.out.print(“Stop”);
}
public static void call(){
System.out.print(“call”);
}
}
인터페이스의 변화
• 기본 메서드는 여러 개 작성가능
• 여러 인터페이스를 구현할 경우 같은 기본 메서드에 모호함에 주의할 것
• 오버라이드를 통해 해결하거나
• Super를 지정하여 디폴트 메소드를 호출.
• C++에서의 다중상속으로 인한 문제점이 발생할 수 있음
스트림(Stream)
• 집계 연산을 지원하는 소스의 개체 시퀀스(????)
• 지연 연산
• 병렬 처리
• 종류
• Stream<T> : 범용 스트림
• IntStream : 값 타입이 int 인 스트림
• LongStream : Long
• DoubleStream : Double
스트림(Stream)
• 스트림 의 세 단계 구성
• A.stream().filter(x -> x > 100).count();
1.스트림생성 2. 중개연산 3.종단연산
(변환) (사용)
스트림과 컬렉션의 차이
• 스트림은 요소들을 보관하지 않는다. 요소들은 하부의 컬렉션에 보관되거
나 필요할 때 생성된다.
• 스트림 연산은 원본을 변경하지 않는다. 대신 결과를 담은 새로운 스트림
을 반환한다.
• 스트림 연산은 가능하면 지연(lazy) 처리된다. 지연 처리란 결과가 필요하
기 전에는 실행되지 않음을 의미한다. 예를 들어, 긴 단어를 모두 세는 대
신 처음 5개 긴 단어를 요청하면, filter 메서드는 5번 째 일치 후 필터링을
중단한다. 결과적으로 무한 스트림도 만들 수 있다.
스트림(Stream) 사용시 주의할 점
• 스트림은 재사용 할 수 없다.
• intStream stream = IntStream.of(1, 2);
stream.forEach(x -> System.out::println(x));
stream.forEach(x -> System.out::println(x)); // 오류!!
• 무한 스트림에 주의
기존 날짜 API 문제점들
• 기존 java.util.Calendar 클래스와 java.util.Date에 많은 문제점들
• 일관성이 없고,
• not immutable,
• int 상수 필드의 남용,
• Calendar와 Date 클래스의 혼용등등…
• (참고)
• 대부분의 프로젝트에서 Joda-Time등 다른 외부 라이브러리를
사용
날짜 API 개선
• 새로운 Java.Time 패키지 추가
• DateTime 클래스대신 ZoneDateTime 클래스
• 요일 클래스는 Enum 상수로 제공
• 생성자 대신 of() 메서드 같은 static factory 메서드
• 밀리초(millisecond)단위의 정확에서 나노초(nanosecond)로 더
정확해짐
• 시계의 개념 추가(java.time.Clock)
• JDBC 대부분 지원
IO/NIO API의 확장
• Files에 스트림을 반환하는 메서드가 몇가지 추가
• Base64 인코딩과 디코딩이 자바 표준API로 추가(java.util.Base64)
참고
• BufferedReader.lines ()
• Files.list (Path)
• Files.walk (Path, int FileVisitOption ...)
• Files.walk (Path, FileVisitOption ...)
• Files.find (Path, int BiPredicate, FileVisitOption ...)
• Files.lines (Path, Charset)
• DirectoryStream.stream ()
Collections API 확장 1
• Iterable.forEach(Consumer)
• Iterator.forEachRemaining(Consumer)
• Collection.removeIf(Predicate)
• Collection.spliterator()
• Collection.stream()
• Collection.parallelStream()
• List.sort(Comparator)
• List.replaceAll(UnaryOperator)
• Map.forEach(BiConsumer)
Collections API 확장 2
• Map.replaceAll(BiFunction)
• Map.putIfAbsent(K, V)
• Map.remove(Object, Object)
• Map.replace(K, V, V)
• Map.replace(K, V)
• Map.computeIfAbsent(K, Function)
• Map.computeIfPresent(K, BiFunction)
• Map.compute(K, BiFunction)
• Map.merge(K, V, BiFunction)
• Map.getOrDefault(Object, V)
그 외…
• Java FX 8
• Concurrency API의 확장(동시성 API)
• 리플렉션과 어노테이션의 변경
• List<@Nullable String>과 같이 제네릭 변수에 어노테이션 가능
• Nashorn JavaScript엔진
• Rhino -> Nashorn 으로 변경되어 성능과 메모리관리 개선
참고
• 책
• Java 8 Lambdas
• Java 8 in Action (번역본도 있습니다.)
• 가장 빨리 만나는 자바 8
• 사이트
• http://blog.fupfin.com/?p=27
• http://www.moreagile.net/2014/04/AllAboutJava8.html
• http://d2.naver.com/helloworld/645609
(기존 날짜 API 문제점과 변경점)
• https://docs.oracle.com/javase/8/docs/api/ 공식 API 문서

More Related Content

What's hot

이것이 자바다 Chap.14 람다식 Lambda expression(java)(KOR)
이것이 자바다 Chap.14 람다식 Lambda expression(java)(KOR)이것이 자바다 Chap.14 람다식 Lambda expression(java)(KOR)
이것이 자바다 Chap.14 람다식 Lambda expression(java)(KOR)MIN SEOK KOO
 
동시성 프로그래밍 하기 좋은 Clojure
동시성 프로그래밍 하기 좋은 Clojure동시성 프로그래밍 하기 좋은 Clojure
동시성 프로그래밍 하기 좋은 ClojureEunmin Kim
 
Java8 & Lambda
Java8 & LambdaJava8 & Lambda
Java8 & Lambda기현 황
 
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)MIN SEOK KOO
 
자바8강의 2강. Stream API
자바8강의 2강. Stream API자바8강의 2강. Stream API
자바8강의 2강. Stream APISejong Park
 
Java 이해하기 쉬운 코드 20210405
Java 이해하기 쉬운 코드 20210405Java 이해하기 쉬운 코드 20210405
Java 이해하기 쉬운 코드 20210405Hyosang Hong
 
Effective c++ 4
Effective c++ 4Effective c++ 4
Effective c++ 4현찬 양
 
자바8 람다식 소개
자바8 람다식 소개자바8 람다식 소개
자바8 람다식 소개beom kyun choi
 
(망작)이것이 자바다 Chap.16 스트림&병렬처리 Stream&parallel processing(java)
(망작)이것이 자바다 Chap.16 스트림&병렬처리 Stream&parallel processing(java)(망작)이것이 자바다 Chap.16 스트림&병렬처리 Stream&parallel processing(java)
(망작)이것이 자바다 Chap.16 스트림&병렬처리 Stream&parallel processing(java)MIN SEOK KOO
 
NHNNEXT 개경프14 Subway Rocket Team Study 3rd C++
NHNNEXT 개경프14 Subway Rocket Team Study 3rd C++NHNNEXT 개경프14 Subway Rocket Team Study 3rd C++
NHNNEXT 개경프14 Subway Rocket Team Study 3rd C++Min-soo Park
 
Effective c++ chapter 1,2 요약
Effective c++ chapter 1,2 요약Effective c++ chapter 1,2 요약
Effective c++ chapter 1,2 요약Nam Hyeonuk
 
effective c++ chapter 3~4 정리
effective c++ chapter 3~4 정리effective c++ chapter 3~4 정리
effective c++ chapter 3~4 정리Injae Lee
 
자바8강의 1강. lambda expression
자바8강의 1강. lambda expression자바8강의 1강. lambda expression
자바8강의 1강. lambda expressionSejong Park
 
Effective c++ chapter 7,8
Effective c++ chapter 7,8Effective c++ chapter 7,8
Effective c++ chapter 7,8문익 장
 
Start IoT with JavaScript - 6.함수
Start IoT with JavaScript - 6.함수Start IoT with JavaScript - 6.함수
Start IoT with JavaScript - 6.함수Park Jonggun
 

What's hot (20)

이것이 자바다 Chap.14 람다식 Lambda expression(java)(KOR)
이것이 자바다 Chap.14 람다식 Lambda expression(java)(KOR)이것이 자바다 Chap.14 람다식 Lambda expression(java)(KOR)
이것이 자바다 Chap.14 람다식 Lambda expression(java)(KOR)
 
동시성 프로그래밍 하기 좋은 Clojure
동시성 프로그래밍 하기 좋은 Clojure동시성 프로그래밍 하기 좋은 Clojure
동시성 프로그래밍 하기 좋은 Clojure
 
ES6 for Node.js Study 2주차
ES6 for Node.js Study 2주차ES6 for Node.js Study 2주차
ES6 for Node.js Study 2주차
 
Java8 & Lambda
Java8 & LambdaJava8 & Lambda
Java8 & Lambda
 
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)
 
자바8강의 2강. Stream API
자바8강의 2강. Stream API자바8강의 2강. Stream API
자바8강의 2강. Stream API
 
ES6 for Node.js Study
ES6 for Node.js StudyES6 for Node.js Study
ES6 for Node.js Study
 
15 swift 클래스
15 swift 클래스15 swift 클래스
15 swift 클래스
 
Java 이해하기 쉬운 코드 20210405
Java 이해하기 쉬운 코드 20210405Java 이해하기 쉬운 코드 20210405
Java 이해하기 쉬운 코드 20210405
 
17 swift 프로토콜
17 swift 프로토콜17 swift 프로토콜
17 swift 프로토콜
 
Effective c++ 4
Effective c++ 4Effective c++ 4
Effective c++ 4
 
자바8 람다식 소개
자바8 람다식 소개자바8 람다식 소개
자바8 람다식 소개
 
(망작)이것이 자바다 Chap.16 스트림&병렬처리 Stream&parallel processing(java)
(망작)이것이 자바다 Chap.16 스트림&병렬처리 Stream&parallel processing(java)(망작)이것이 자바다 Chap.16 스트림&병렬처리 Stream&parallel processing(java)
(망작)이것이 자바다 Chap.16 스트림&병렬처리 Stream&parallel processing(java)
 
NHNNEXT 개경프14 Subway Rocket Team Study 3rd C++
NHNNEXT 개경프14 Subway Rocket Team Study 3rd C++NHNNEXT 개경프14 Subway Rocket Team Study 3rd C++
NHNNEXT 개경프14 Subway Rocket Team Study 3rd C++
 
Effective c++ chapter 1,2 요약
Effective c++ chapter 1,2 요약Effective c++ chapter 1,2 요약
Effective c++ chapter 1,2 요약
 
자바 8 학습
자바 8 학습자바 8 학습
자바 8 학습
 
effective c++ chapter 3~4 정리
effective c++ chapter 3~4 정리effective c++ chapter 3~4 정리
effective c++ chapter 3~4 정리
 
자바8강의 1강. lambda expression
자바8강의 1강. lambda expression자바8강의 1강. lambda expression
자바8강의 1강. lambda expression
 
Effective c++ chapter 7,8
Effective c++ chapter 7,8Effective c++ chapter 7,8
Effective c++ chapter 7,8
 
Start IoT with JavaScript - 6.함수
Start IoT with JavaScript - 6.함수Start IoT with JavaScript - 6.함수
Start IoT with JavaScript - 6.함수
 

Viewers also liked

DBワークロードのAWS化とデータベースサービス関連最新情報
DBワークロードのAWS化とデータベースサービス関連最新情報DBワークロードのAWS化とデータベースサービス関連最新情報
DBワークロードのAWS化とデータベースサービス関連最新情報Amazon Web Services Japan
 
9.约瑟饶恕他的哥哥
9.约瑟饶恕他的哥哥9.约瑟饶恕他的哥哥
9.约瑟饶恕他的哥哥Jean Liu
 
Kακοποίηση γυναικών
Kακοποίηση γυναικώνKακοποίηση γυναικών
Kακοποίηση γυναικώνPopi Kaza
 
Desarrollo humano y profesional
Desarrollo humano y profesionalDesarrollo humano y profesional
Desarrollo humano y profesionalestefany abad
 
Water logging and salinity control
Water logging and salinity controlWater logging and salinity control
Water logging and salinity controlmohinder singh
 
Alumbrado público revista
Alumbrado público revistaAlumbrado público revista
Alumbrado público revistajesusdamian91
 
Titina y evidencia de un sistema tenso activo
Titina y evidencia de un sistema tenso activoTitina y evidencia de un sistema tenso activo
Titina y evidencia de un sistema tenso activoDAVID LOPEZ
 
ESET. Алексей Головин. "ESET. Антивирусная защита и не только"
ESET. Алексей Головин. "ESET. Антивирусная защита и не только"ESET. Алексей Головин. "ESET. Антивирусная защита и не только"
ESET. Алексей Головин. "ESET. Антивирусная защита и не только"Expolink
 
Mentoring, resumen del rol
Mentoring, resumen del rolMentoring, resumen del rol
Mentoring, resumen del rolGHP
 
暗号通貨勉強会
暗号通貨勉強会暗号通貨勉強会
暗号通貨勉強会Kohei Ogawa
 

Viewers also liked (13)

Ensayo objeto de aprendizaje
Ensayo objeto de aprendizajeEnsayo objeto de aprendizaje
Ensayo objeto de aprendizaje
 
DBワークロードのAWS化とデータベースサービス関連最新情報
DBワークロードのAWS化とデータベースサービス関連最新情報DBワークロードのAWS化とデータベースサービス関連最新情報
DBワークロードのAWS化とデータベースサービス関連最新情報
 
9.约瑟饶恕他的哥哥
9.约瑟饶恕他的哥哥9.约瑟饶恕他的哥哥
9.约瑟饶恕他的哥哥
 
Kακοποίηση γυναικών
Kακοποίηση γυναικώνKακοποίηση γυναικών
Kακοποίηση γυναικών
 
5 benefits of at home care for seniors
5 benefits of at home care for seniors5 benefits of at home care for seniors
5 benefits of at home care for seniors
 
Desarrollo humano y profesional
Desarrollo humano y profesionalDesarrollo humano y profesional
Desarrollo humano y profesional
 
Water logging and salinity control
Water logging and salinity controlWater logging and salinity control
Water logging and salinity control
 
Alumbrado público revista
Alumbrado público revistaAlumbrado público revista
Alumbrado público revista
 
Funciones trascendentes
Funciones trascendentesFunciones trascendentes
Funciones trascendentes
 
Titina y evidencia de un sistema tenso activo
Titina y evidencia de un sistema tenso activoTitina y evidencia de un sistema tenso activo
Titina y evidencia de un sistema tenso activo
 
ESET. Алексей Головин. "ESET. Антивирусная защита и не только"
ESET. Алексей Головин. "ESET. Антивирусная защита и не только"ESET. Алексей Головин. "ESET. Антивирусная защита и не только"
ESET. Алексей Головин. "ESET. Антивирусная защита и не только"
 
Mentoring, resumen del rol
Mentoring, resumen del rolMentoring, resumen del rol
Mentoring, resumen del rol
 
暗号通貨勉強会
暗号通貨勉強会暗号通貨勉強会
暗号通貨勉強会
 

Similar to 자바 8

C++ Advanced 강의 5주차
C++ Advanced 강의 5주차C++ Advanced 강의 5주차
C++ Advanced 강의 5주차HyunJoon Park
 
0.javascript기본(~3일차내)
0.javascript기본(~3일차내)0.javascript기본(~3일차내)
0.javascript기본(~3일차내)Sung-hoon Ma
 
Java collections framework
Java collections frameworkJava collections framework
Java collections framework경주 전
 
자바8정리.pdf
자바8정리.pdf자바8정리.pdf
자바8정리.pdfSeokju Hong
 
자바스크립트 함수
자바스크립트 함수자바스크립트 함수
자바스크립트 함수유진 변
 
Chapter7~9 ppt
Chapter7~9 pptChapter7~9 ppt
Chapter7~9 pptInjae Lee
 
SpringCamp 2013 : About Jdk8
SpringCamp 2013 : About Jdk8SpringCamp 2013 : About Jdk8
SpringCamp 2013 : About Jdk8Sangmin Lee
 
Concurrent Programming (Java thread 다루기)
Concurrent Programming (Java thread 다루기)Concurrent Programming (Java thread 다루기)
Concurrent Programming (Java thread 다루기)JungGeun Lee
 
Sonarqube 20160509
Sonarqube 20160509Sonarqube 20160509
Sonarqube 20160509영석 조
 
[Swift] Protocol (1/2)
[Swift] Protocol (1/2)[Swift] Protocol (1/2)
[Swift] Protocol (1/2)Bill Kim
 
Let's Go (golang)
Let's Go (golang)Let's Go (golang)
Let's Go (golang)상욱 송
 
C Language For Arduino
C Language For ArduinoC Language For Arduino
C Language For Arduino영욱 김
 
이펙티브 C++ (7~9)
이펙티브 C++ (7~9)이펙티브 C++ (7~9)
이펙티브 C++ (7~9)익성 조
 

Similar to 자바 8 (20)

C++ Advanced 강의 5주차
C++ Advanced 강의 5주차C++ Advanced 강의 5주차
C++ Advanced 강의 5주차
 
0.javascript기본(~3일차내)
0.javascript기본(~3일차내)0.javascript기본(~3일차내)
0.javascript기본(~3일차내)
 
Java collections framework
Java collections frameworkJava collections framework
Java collections framework
 
자바8정리.pdf
자바8정리.pdf자바8정리.pdf
자바8정리.pdf
 
자바스크립트 함수
자바스크립트 함수자바스크립트 함수
자바스크립트 함수
 
Java_10 람다
Java_10 람다Java_10 람다
Java_10 람다
 
Chapter7~9 ppt
Chapter7~9 pptChapter7~9 ppt
Chapter7~9 ppt
 
Java8 람다
Java8 람다Java8 람다
Java8 람다
 
Annotation
AnnotationAnnotation
Annotation
 
SpringCamp 2013 : About Jdk8
SpringCamp 2013 : About Jdk8SpringCamp 2013 : About Jdk8
SpringCamp 2013 : About Jdk8
 
4-1. javascript
4-1. javascript4-1. javascript
4-1. javascript
 
Concurrent Programming (Java thread 다루기)
Concurrent Programming (Java thread 다루기)Concurrent Programming (Java thread 다루기)
Concurrent Programming (Java thread 다루기)
 
Java memory
Java memoryJava memory
Java memory
 
Sonarqube 20160509
Sonarqube 20160509Sonarqube 20160509
Sonarqube 20160509
 
[Swift] Protocol (1/2)
[Swift] Protocol (1/2)[Swift] Protocol (1/2)
[Swift] Protocol (1/2)
 
JDK 변천사
JDK 변천사JDK 변천사
JDK 변천사
 
Java(2/4)
Java(2/4)Java(2/4)
Java(2/4)
 
Let's Go (golang)
Let's Go (golang)Let's Go (golang)
Let's Go (golang)
 
C Language For Arduino
C Language For ArduinoC Language For Arduino
C Language For Arduino
 
이펙티브 C++ (7~9)
이펙티브 C++ (7~9)이펙티브 C++ (7~9)
이펙티브 C++ (7~9)
 

자바 8

  • 2. 주요 특징 • 람다식(Lambda Expression) • 스트림(Stream) API • 기본 메서드(Default Method) • 자바스크립트 엔진 -> Nashorn • 날짜 API 변경(JSR 310) • 동시성 API 개선 • IO/NIO 확장 • 제너릭 타입의 생략가능
  • 3. 함수형 프로그래밍 • 함수형 프로그래밍은 대입문 없이 프로그래밍 하는 것? • Clojure (take 25 (squares-of (integers))) • 참조 투명성 • 멀티코어 • 동시성 • 변수 X
  • 4. 람다식(Lambda Expression) • 함수를 변수에 할당, 인자로 넘길수 있는 표기법 • 익명메서드 • 문법 람다 매개변수 -> 람다 본문 • 함수형 인터페이스(Functional Interface) 메서드가 하나뿐인 인터페이스 • Java.util.function 에 범용으로 쓸수있는 다양한 인터페이스가 준비되어있 다.
  • 5. 람다식 기본문법 • (타입 매개변수, …) -> {실행문; …} • 매개 변수의 이름은 자유 • 매개 변수의 타입은 생략할 수 도 있다. • 하나의 매개 변수 () 생략가능, 하나의 실행문 {} 생략가능 • 매개변수가 없다면 ()를 반드시 사용해야한다. • {} 를 사용하고 결과값을 리턴해야 하는 경우 return 작성
  • 6. 람다식 • (int x, int y) -> { return x + y; } • (x, y) -> x + y • x -> x * x • (x, y) -> { return x + y; } • x -> { System.out.println(x); } • () -> { System.out.println(“안녕하세요”); }
  • 7. 함수형 인터페이스 • 추상 메서드가 1개인 인터페이스 public interface Comparator<T>{ int compare(T o1, T o2) } Comparator<Long> comp = (Long o1, Long o2) -> o2 – o1 < 0 ? -1 : 1
  • 8. 함수형 인터페이스 • @FunctionalInterface 어노테이션 두개 이상의 추상메소드가 선언되지 않도록 컴파일러가 강제 • 실수로 두 이상의 추상메소드를 선언하는걸 방지 • @FunctionalInterface public interface MyFunctionalInterface { public void method1(); public void method2(); // 오류!! }
  • 9. 함수형 인터페이스 와 대상 타입 • 람다식은 인터페이스 변수에 대입 즉, 람다식은 인터페이스의 익명 구현 객체를 생성한다는 뜻 • @FunctionalInterface public interface MyFunctionalInterface3 { public void method(); } • FunctionalInterface myFunction = () -> { System.out.print(“작동!”); } • myFunction.method();
  • 10. 클래스 멤버 변수 와 로컬 변수 • 클래스의 멤버(필드와 메소드) 및 로컬 변수 사용가능 • 람다식에서 this는 내부적으로 생성되는 익명 객체의 참조가 아니라 람다식을 실행한 객체의 참조 • 로컬 변수의 사용에는 제약 사항이 따름 메소드의 매개 변수 또는 로컬 변수를 사용하면 이 두 변수는 final 특성을 가져야한다.
  • 11. 인터페이스의 변화 • 기본 메서드(Default Method) • 인터페이스에 구현된 메서드를 작성하여 오버라이드 하지않아도 기본 구현물 제공 • 하위호환성 문제 해결 • 정적 메서드의 추가 가능 • public interface myInterface{ public abstract void run(); public default void defaultStop(){ System.out.print(“Stop”); } public static void call(){ System.out.print(“call”); } }
  • 12. 인터페이스의 변화 • 기본 메서드는 여러 개 작성가능 • 여러 인터페이스를 구현할 경우 같은 기본 메서드에 모호함에 주의할 것 • 오버라이드를 통해 해결하거나 • Super를 지정하여 디폴트 메소드를 호출. • C++에서의 다중상속으로 인한 문제점이 발생할 수 있음
  • 13. 스트림(Stream) • 집계 연산을 지원하는 소스의 개체 시퀀스(????) • 지연 연산 • 병렬 처리 • 종류 • Stream<T> : 범용 스트림 • IntStream : 값 타입이 int 인 스트림 • LongStream : Long • DoubleStream : Double
  • 14. 스트림(Stream) • 스트림 의 세 단계 구성 • A.stream().filter(x -> x > 100).count(); 1.스트림생성 2. 중개연산 3.종단연산 (변환) (사용)
  • 15. 스트림과 컬렉션의 차이 • 스트림은 요소들을 보관하지 않는다. 요소들은 하부의 컬렉션에 보관되거 나 필요할 때 생성된다. • 스트림 연산은 원본을 변경하지 않는다. 대신 결과를 담은 새로운 스트림 을 반환한다. • 스트림 연산은 가능하면 지연(lazy) 처리된다. 지연 처리란 결과가 필요하 기 전에는 실행되지 않음을 의미한다. 예를 들어, 긴 단어를 모두 세는 대 신 처음 5개 긴 단어를 요청하면, filter 메서드는 5번 째 일치 후 필터링을 중단한다. 결과적으로 무한 스트림도 만들 수 있다.
  • 16. 스트림(Stream) 사용시 주의할 점 • 스트림은 재사용 할 수 없다. • intStream stream = IntStream.of(1, 2); stream.forEach(x -> System.out::println(x)); stream.forEach(x -> System.out::println(x)); // 오류!! • 무한 스트림에 주의
  • 17. 기존 날짜 API 문제점들 • 기존 java.util.Calendar 클래스와 java.util.Date에 많은 문제점들 • 일관성이 없고, • not immutable, • int 상수 필드의 남용, • Calendar와 Date 클래스의 혼용등등… • (참고) • 대부분의 프로젝트에서 Joda-Time등 다른 외부 라이브러리를 사용
  • 18. 날짜 API 개선 • 새로운 Java.Time 패키지 추가 • DateTime 클래스대신 ZoneDateTime 클래스 • 요일 클래스는 Enum 상수로 제공 • 생성자 대신 of() 메서드 같은 static factory 메서드 • 밀리초(millisecond)단위의 정확에서 나노초(nanosecond)로 더 정확해짐 • 시계의 개념 추가(java.time.Clock) • JDBC 대부분 지원
  • 19. IO/NIO API의 확장 • Files에 스트림을 반환하는 메서드가 몇가지 추가 • Base64 인코딩과 디코딩이 자바 표준API로 추가(java.util.Base64) 참고 • BufferedReader.lines () • Files.list (Path) • Files.walk (Path, int FileVisitOption ...) • Files.walk (Path, FileVisitOption ...) • Files.find (Path, int BiPredicate, FileVisitOption ...) • Files.lines (Path, Charset) • DirectoryStream.stream ()
  • 20. Collections API 확장 1 • Iterable.forEach(Consumer) • Iterator.forEachRemaining(Consumer) • Collection.removeIf(Predicate) • Collection.spliterator() • Collection.stream() • Collection.parallelStream() • List.sort(Comparator) • List.replaceAll(UnaryOperator) • Map.forEach(BiConsumer)
  • 21. Collections API 확장 2 • Map.replaceAll(BiFunction) • Map.putIfAbsent(K, V) • Map.remove(Object, Object) • Map.replace(K, V, V) • Map.replace(K, V) • Map.computeIfAbsent(K, Function) • Map.computeIfPresent(K, BiFunction) • Map.compute(K, BiFunction) • Map.merge(K, V, BiFunction) • Map.getOrDefault(Object, V)
  • 22. 그 외… • Java FX 8 • Concurrency API의 확장(동시성 API) • 리플렉션과 어노테이션의 변경 • List<@Nullable String>과 같이 제네릭 변수에 어노테이션 가능 • Nashorn JavaScript엔진 • Rhino -> Nashorn 으로 변경되어 성능과 메모리관리 개선
  • 23. 참고 • 책 • Java 8 Lambdas • Java 8 in Action (번역본도 있습니다.) • 가장 빨리 만나는 자바 8 • 사이트 • http://blog.fupfin.com/?p=27 • http://www.moreagile.net/2014/04/AllAboutJava8.html • http://d2.naver.com/helloworld/645609 (기존 날짜 API 문제점과 변경점) • https://docs.oracle.com/javase/8/docs/api/ 공식 API 문서