SlideShare a Scribd company logo
1 of 22
Download to read offline
JAVA 9 Features
한창환 (Chang-Hwan Han)
atin84@gmail.com
 새로운 툴인 "JShell"을 제공
◦ 쉘과 REPL(Read Evaluate Print Loop)을 위한 것
◦ 자바 클래스, 인터페이스, 객체 등의 생성을 매우 쉽게 실행하고 테스트하게 해줌
 REPL(Read Evaluate Print Loop)
◦ 읽고(read), 계산하고(evaluate), 출력하는(print) 반복 구조
◦ 스크립트 언어 (interactive interpreter shell )들의 다른 명칭(예전 이름)
◦ 개발자가 간단한 코드를 입력하여 바로 결과값을 확인하게 해주는 편의성 툴
 다운 가능한 곳 : https://jdk9.java.net/download/
2
3
G:>jshell
| Welcome to JShell -- Version 9-ea
| For an introduction type: /help intro
jshell> int a = 10
a ==> 10
jshell> System.out.println("a value = " + a )
a value = 10
 불변 List, Set, Map, Map.Entry를 만들어주는 편리한 신규 팩토리 메서드 제공
 비어있거나 비어있지 않은 Collection 객체를 만드는데 사용
 자바8이나 이전 버전에서 우리는 Collections 클래스의 unmodifiableXXX와 같은
유틸 메서드를 사용해서 불변 Collection 객체를 만듬
◦ 그러나 그 메서드들을 이용한 방법은 지루하고 장황
◦ 그 단점을 없애기 위해서 새로운 팩토리 메서드를 추가.
4
 List와 Set 인터페이스
◦ "of" 메서드는 불변의 비어있거나 비어있지 않은 List 또는 Set을 만들어줌
 Empty List Example
 Non-Empty List Example
5
List immutableList = List.of();
List immutableList = List.of("one","two","three");
 Map 인터페이스
◦ "of ", "ofEntires “ 메서드
◦ 불변 Map 객체나 불변 Map.Entry 객체를 만듬
 Empty Map Example
 Non-Empty Map Example
6
jshell> Map emptyImmutableMap = Map.of()
emptyImmutableMap ==> {}
jshell> Map nonemptyImmutableMap = Map.of(1, "one", 2, "two", 3, "three")
nonemptyImmutableMap ==> {2=two, 3=three, 1=one}
 Java8에서 Default와 Static 메서드를 이용해서 인터페이스에 구현체를 넣는 방법이
추가됨
 하지만 private으로 구현체를 추가하는 방법이 없었기 때문에 이번에 추가되었음
7
public interface Card{
private Long createCardID(){
// Method implementation goes here.
}
private static void displayCardDetails(){
// Method implementation goes here.
}
}
 자바9의 큰 변화 중 하나는 모듈 시스템
 직소 프로젝트(Jigsaw project)는 다음과 같은 특징을 갖고 있음
◦ Modular JDK
◦ Modular Java Source Code
◦ Modular Run-time Images
◦ Encapsulate Java Internal APIs
◦ Java Platform Module System
 자바 SE 9 버전 전에는 자바 기반 응용 프로그램을 개발할 때 모노리틱
(monolithic) Jar 방식을 사용했음
◦ 한계와 단점이 많았음
◦ 이러한 모든 단점을 방지하기 위해, 자바 SE 9 모듈 시스템이 나옴
8
 JDK 9는 92 모듈 (최종 릴리스에서 변경 될 수 있습니다)와 함께 함
 JDK 모듈을 사용할 수 있고 아래와 같이 자신의 모듈을 만들 수 있음
 Simple Module Example
9
module com.atin.monitor.ui {
requires javafx.base;
requires javafx.controls;
requires javafx.graphics;
exports com.atin.monitor.ui.launch;
exports com.atin.monitor.ui.show;
}
10
 자바9에서 프로세스 API를 개선함
 다음과 같은 두 커플 형태의 신규 클래스가 추가되었다.
◦ OS 프로세스를 관리 및 컨트롤할 있음
 java.lang.ProcessHandle
 java.lang.ProcessHandle.Info
 Process API Example
11
ProcessHandle currentProcess = ProcessHandle.current();
System.out.println("Id: = " + currentProcess.getPid());
 자바 7에서 나온 자원 관리 방법(try with resource)을 개선
 Java 7
 Java 9
12
void testARM_Before_Java9() throws IOException{
BufferedReader reader1 = new BufferedReader(
new FileReader("journaldev.txt"));
try (BufferedReader reader2 = reader1) {
System.out.println(reader2.readLine());
}
}
void testARM_Java9() throws IOException{
BufferedReader reader1 = new BufferedReader(
new FileReader("journaldev.txt"));
try (reader1) {
System.out.println(reader1.readLine());
}
}
 자바8에서 CompletableFuture가 가지는 문제점을 개선
 delayedExecutor()은 static 유틸 메서드로 사용
 주어진 시간 딜레이 이후에 기본 실행자로 보내진 new Executor를 반환
13
Executor exe =
CompletableFuture.delayedExecutor(50L, TimeUnit.SECONDS);
 리액티브 프로그래밍은 큰 인기를 끌고 있음
 Scala, Play, Akka 등의 프레임워크는 이미 리액티브 스트림을 구축
 Java9은 새로운 리액티브 스트림 API를 추가함
 자바9의 리액티브 스트림 API
◦ 자바 언어를 이용해서 매우 쉽게 병행성, 확장성, 비동기 애플리케이션을 구현
한 Publish / Subscribe 프레임워크
◦ API
 java.util.concurrent.Flow
 java.util.concurrent.Flow.Publisher
 java.util.concurrent.Flow.Subscriber
 java.util.concurrent.Flow.Processor
14
 자바 7에서 Diamond Operator를 추가했지만,
자바 8에서 익명 내부 클래스 사용시 한계가 있다는 것을 확인
 해당 이슈를 수정하였고 아래와 같은 예를 들 수 있다.
 자세한 타입 파라미터 없이 단순히 "List"만을 사용하였지만 상세한 타입을 알아서 확
인해서 읽고 처리함
15
public List getEmployee(String empid){
// Code to get Employee details from Data Store
return new List(emp){ };
}
 Optional 클래스에 신규 메서드를 추가
 값이 Optional 객체로 주어질 때 Stream 메서드는 값과 함께 sequential stream을
리턴, 값이 비어 있다면 빈 스트림을 리턴함
 다음은 Optional에서 stream의 사용 형태를 보여준다.
 위 Optional.stream 메서드는 Employee 객체의 Optional 스트림을 Employee 객
체 스트림으로 변환해줌
16
Stream<Optional> emp = getEmployee(id)
Stream empStream = emp.flatMap(Optional::stream)
 Stream 인터페이스에 사용 가능한 4개의 메서드가 추가
 Stream은 인터페이스이므로 신규 구현된 메서드는 모두 default 메서드
 그 중 두 개는 매우 중요
◦ dropWhile 메서드
◦ takeWhile 메서드
 takeWhile은 인수로서의 predicate를 취하고 주어진 값의 스트림 서브셋을 리턴
 해당 값을 만족시키는 값이 없으면 빈 스트림을 리턴.
17
jshell> Stream.of(1,2,3,4,5,6,7,8,9,10)
.takeWhile(i -> i < 5 )
.forEach(System.out::println);
1
2
3
4
 자바8과 이전 버전에서 @Deprecated 어느테이션
◦ 어떤 메서드도 없이 단순히 마커 인터페이스
 Java SE 9에서 Oracle Corporation은 @Deprecated 주석을 강화
◦ 지원 중단 된 API에 대한 자세한 정보를 제공
◦ 지원 중단 된 API의 정적 사용을 분석하는 도구를 제공
 forRemoval고 since가 추가됨 (정보 제공)
18
 추가 배경
◦ HTTP/2 프로토콜과 WebSocket 기능을 지원하기 위함
◦ 기존 HTTP 클라이언트 API에 많은 문제점이 있음
 새로운 HTTP 2 클라이언트 API가 추가
◦ "java.net.http" 패키지에 새로운 HTTP 2 클라이언트 API 도입
◦ HTTP / 1.1 및 HTTP / 2 프로토콜 모두 지원
◦ 동기화(블로킹 모드)와 비동기 모드 모두 지원
◦ WebSocket API를 사용하여 비동기 모드 지원
 상세 자료
◦ http://download.java.net/java/jdk9/docs/api/java/net/http/package-
summary.html
19
 Java SE 9에서 새로운 multi-Resolution Image API를 도입 예정
 이 API의 중요한 인터페이스는 MultiResolutionImage
 java.awt.image 패키지로 이용 가능
 MultiResolutionImage
◦ 서로 다른 높이와 너비 (해상도가 다름)의 이미지 세트를 캡슐화
◦ 요구 사항을 사용하여 이미지를 쿼리 할 수 있도록 함
20
 기타 특징 (덜 중요한 특징은 아님)
◦ GC (Garbage Collector) Improvements
◦ Stack-Walking API
◦ Filter Incoming Serialization Data
◦ Deprecate the Applet API
◦ Indify String Concatenation
◦ Enhanced Method Handles
◦ Java Platform Logging API and Service
◦ Compact Strings
◦ Parser API for Nashorn
◦ Javadoc Search
◦ HTML5 Javadoc
21
1. Java9 Features
(http://www.journaldev.com/13121/java-9-features-with-examples)
22

More Related Content

What's hot

Spring batch와 함께 하는 TDD
Spring batch와 함께 하는 TDDSpring batch와 함께 하는 TDD
Spring batch와 함께 하는 TDDSanghyuk Jung
 
(스프링교육/마이바티스교육학원추천_탑크리에듀)#10.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
(스프링교육/마이바티스교육학원추천_탑크리에듀)#10.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)(스프링교육/마이바티스교육학원추천_탑크리에듀)#10.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
(스프링교육/마이바티스교육학원추천_탑크리에듀)#10.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)탑크리에듀(구로디지털단지역3번출구 2분거리)
 
[115] clean fe development_윤지수
[115] clean fe development_윤지수[115] clean fe development_윤지수
[115] clean fe development_윤지수NAVER D2
 
#19.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
#19.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...#19.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
#19.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...탑크리에듀(구로디지털단지역3번출구 2분거리)
 
#20.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
#20.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...#20.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
#20.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...탑크리에듀(구로디지털단지역3번출구 2분거리)
 
자바에서 null을 안전하게 다루는 방법
자바에서 null을 안전하게 다루는 방법자바에서 null을 안전하게 다루는 방법
자바에서 null을 안전하게 다루는 방법Sungchul Park
 
Spring one참석기 ksug
Spring one참석기 ksugSpring one참석기 ksug
Spring one참석기 ksugSanghyuk Jung
 
(IT실무교육/국비지원교육/자바/스프링교육추천)#15.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
(IT실무교육/국비지원교육/자바/스프링교육추천)#15.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)(IT실무교육/국비지원교육/자바/스프링교육추천)#15.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
(IT실무교육/국비지원교육/자바/스프링교육추천)#15.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)탑크리에듀(구로디지털단지역3번출구 2분거리)
 
React 튜토리얼 1차시
React 튜토리얼 1차시React 튜토리얼 1차시
React 튜토리얼 1차시태현 김
 
Springcamp spring boot intro
Springcamp spring boot introSpringcamp spring boot intro
Springcamp spring boot introJae-il Lee
 
자바8 나머지 공개
자바8 나머지 공개자바8 나머지 공개
자바8 나머지 공개Sungchul Park
 
#17.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
#17.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...#17.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
#17.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...탑크리에듀(구로디지털단지역3번출구 2분거리)
 
[#9.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)]_재직자환급교육/실업자환급교육/구로IT학원/스프링교...
[#9.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)]_재직자환급교육/실업자환급교육/구로IT학원/스프링교...[#9.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)]_재직자환급교육/실업자환급교육/구로IT학원/스프링교...
[#9.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)]_재직자환급교육/실업자환급교육/구로IT학원/스프링교...탑크리에듀(구로디지털단지역3번출구 2분거리)
 
스프링 어플리케이션의 문제해결사례와 안티패턴
스프링 어플리케이션의 문제해결사례와 안티패턴스프링 어플리케이션의 문제해결사례와 안티패턴
스프링 어플리케이션의 문제해결사례와 안티패턴Sanghyuk Jung
 

What's hot (20)

Spring batch와 함께 하는 TDD
Spring batch와 함께 하는 TDDSpring batch와 함께 하는 TDD
Spring batch와 함께 하는 TDD
 
Spring Boot 2
Spring Boot 2Spring Boot 2
Spring Boot 2
 
HTTP web server 구현
HTTP web server 구현HTTP web server 구현
HTTP web server 구현
 
Jpa more
Jpa moreJpa more
Jpa more
 
(스프링교육/마이바티스교육학원추천_탑크리에듀)#10.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
(스프링교육/마이바티스교육학원추천_탑크리에듀)#10.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)(스프링교육/마이바티스교육학원추천_탑크리에듀)#10.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
(스프링교육/마이바티스교육학원추천_탑크리에듀)#10.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
 
[115] clean fe development_윤지수
[115] clean fe development_윤지수[115] clean fe development_윤지수
[115] clean fe development_윤지수
 
#19.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
#19.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...#19.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
#19.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
 
#20.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
#20.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...#20.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
#20.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
 
자바에서 null을 안전하게 다루는 방법
자바에서 null을 안전하게 다루는 방법자바에서 null을 안전하게 다루는 방법
자바에서 null을 안전하게 다루는 방법
 
자바모델 클래스에 날개를달자_롬복(Lombok)
자바모델 클래스에 날개를달자_롬복(Lombok)자바모델 클래스에 날개를달자_롬복(Lombok)
자바모델 클래스에 날개를달자_롬복(Lombok)
 
Spring one참석기 ksug
Spring one참석기 ksugSpring one참석기 ksug
Spring one참석기 ksug
 
(IT실무교육/국비지원교육/자바/스프링교육추천)#15.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
(IT실무교육/국비지원교육/자바/스프링교육추천)#15.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)(IT실무교육/국비지원교육/자바/스프링교육추천)#15.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
(IT실무교육/국비지원교육/자바/스프링교육추천)#15.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
 
React 튜토리얼 1차시
React 튜토리얼 1차시React 튜토리얼 1차시
React 튜토리얼 1차시
 
(Spring Data JPA)식별자(@Id, Primary Key) 자동 생성, @GeneratedValue의 strategy 속성,Ge...
(Spring Data JPA)식별자(@Id, Primary Key) 자동 생성, @GeneratedValue의 strategy 속성,Ge...(Spring Data JPA)식별자(@Id, Primary Key) 자동 생성, @GeneratedValue의 strategy 속성,Ge...
(Spring Data JPA)식별자(@Id, Primary Key) 자동 생성, @GeneratedValue의 strategy 속성,Ge...
 
Springcamp spring boot intro
Springcamp spring boot introSpringcamp spring boot intro
Springcamp spring boot intro
 
자바8 나머지 공개
자바8 나머지 공개자바8 나머지 공개
자바8 나머지 공개
 
(스프링초보자를위한)스프링 컨텍스트 설정과 관련된 어노테이션
(스프링초보자를위한)스프링 컨텍스트 설정과 관련된 어노테이션(스프링초보자를위한)스프링 컨텍스트 설정과 관련된 어노테이션
(스프링초보자를위한)스프링 컨텍스트 설정과 관련된 어노테이션
 
#17.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
#17.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...#17.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
#17.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
 
[#9.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)]_재직자환급교육/실업자환급교육/구로IT학원/스프링교...
[#9.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)]_재직자환급교육/실업자환급교육/구로IT학원/스프링교...[#9.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)]_재직자환급교육/실업자환급교육/구로IT학원/스프링교...
[#9.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)]_재직자환급교육/실업자환급교육/구로IT학원/스프링교...
 
스프링 어플리케이션의 문제해결사례와 안티패턴
스프링 어플리케이션의 문제해결사례와 안티패턴스프링 어플리케이션의 문제해결사례와 안티패턴
스프링 어플리케이션의 문제해결사례와 안티패턴
 

Similar to 자바9 특징 (Java9 Features)

Gradle 한번 살펴보기
Gradle 한번 살펴보기Gradle 한번 살펴보기
Gradle 한번 살펴보기Junseo Youn
 
Introduction to Fork Join Framework_SYS4U I&C
Introduction to Fork Join Framework_SYS4U I&CIntroduction to Fork Join Framework_SYS4U I&C
Introduction to Fork Join Framework_SYS4U I&Csys4u
 
테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)
테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)
테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)SangIn Choung
 
Front end dev 2016 & beyond
Front end dev 2016 & beyondFront end dev 2016 & beyond
Front end dev 2016 & beyondJae Sung Park
 
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거Javajigi Jaesung
 
JavaEE6 - 설계 차원의 단순성
JavaEE6 - 설계 차원의 단순성JavaEE6 - 설계 차원의 단순성
JavaEE6 - 설계 차원의 단순성Jay Lee
 
Spring Framework - Inversion of Control Container
Spring Framework - Inversion of Control ContainerSpring Framework - Inversion of Control Container
Spring Framework - Inversion of Control ContainerKyung Koo Yoon
 
Unionweb프로젝트
Unionweb프로젝트Unionweb프로젝트
Unionweb프로젝트Dong-Jin Park
 
자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)
자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)
자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)DK Lee
 
[Uws] enterprise application architecture, msa, java9, spring 소개
[Uws] enterprise application architecture, msa, java9, spring 소개[Uws] enterprise application architecture, msa, java9, spring 소개
[Uws] enterprise application architecture, msa, java9, spring 소개HYUN-JOO LEE
 
레일스를 이용한 애자일 웹 개발 가이드
레일스를 이용한 애자일 웹 개발 가이드레일스를 이용한 애자일 웹 개발 가이드
레일스를 이용한 애자일 웹 개발 가이드Sukjoon Kim
 
Node.js 시작하기
Node.js 시작하기Node.js 시작하기
Node.js 시작하기Huey Park
 
올챙이로 살펴보는 개발툴과 Cloud
올챙이로 살펴보는 개발툴과 Cloud올챙이로 살펴보는 개발툴과 Cloud
올챙이로 살펴보는 개발툴과 Cloudcho hyun jong
 
Spring Boot + React + Gradle in VSCode
Spring Boot + React + Gradle in VSCodeSpring Boot + React + Gradle in VSCode
Spring Boot + React + Gradle in VSCodedpTablo
 

Similar to 자바9 특징 (Java9 Features) (20)

Gradle 한번 살펴보기
Gradle 한번 살펴보기Gradle 한번 살펴보기
Gradle 한번 살펴보기
 
Springmvc
SpringmvcSpringmvc
Springmvc
 
Introduction to Fork Join Framework_SYS4U I&C
Introduction to Fork Join Framework_SYS4U I&CIntroduction to Fork Join Framework_SYS4U I&C
Introduction to Fork Join Framework_SYS4U I&C
 
테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)
테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)
테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)
 
Front end dev 2016 & beyond
Front end dev 2016 & beyondFront end dev 2016 & beyond
Front end dev 2016 & beyond
 
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
 
JavaEE6 - 설계 차원의 단순성
JavaEE6 - 설계 차원의 단순성JavaEE6 - 설계 차원의 단순성
JavaEE6 - 설계 차원의 단순성
 
Spring Framework - Inversion of Control Container
Spring Framework - Inversion of Control ContainerSpring Framework - Inversion of Control Container
Spring Framework - Inversion of Control Container
 
Unionweb프로젝트
Unionweb프로젝트Unionweb프로젝트
Unionweb프로젝트
 
java_1장.pptx
java_1장.pptxjava_1장.pptx
java_1장.pptx
 
자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)
자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)
자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)
 
[Uws] enterprise application architecture, msa, java9, spring 소개
[Uws] enterprise application architecture, msa, java9, spring 소개[Uws] enterprise application architecture, msa, java9, spring 소개
[Uws] enterprise application architecture, msa, java9, spring 소개
 
레일스를 이용한 애자일 웹 개발 가이드
레일스를 이용한 애자일 웹 개발 가이드레일스를 이용한 애자일 웹 개발 가이드
레일스를 이용한 애자일 웹 개발 가이드
 
Node.js 시작하기
Node.js 시작하기Node.js 시작하기
Node.js 시작하기
 
java_1장.pptx
java_1장.pptxjava_1장.pptx
java_1장.pptx
 
java_1장
java_1장java_1장
java_1장
 
올챙이로 살펴보는 개발툴과 Cloud
올챙이로 살펴보는 개발툴과 Cloud올챙이로 살펴보는 개발툴과 Cloud
올챙이로 살펴보는 개발툴과 Cloud
 
Spring Boot + React + Gradle in VSCode
Spring Boot + React + Gradle in VSCodeSpring Boot + React + Gradle in VSCode
Spring Boot + React + Gradle in VSCode
 
Java the good parts
Java the good partsJava the good parts
Java the good parts
 
N02 gae v1.1_20110220
N02 gae v1.1_20110220N02 gae v1.1_20110220
N02 gae v1.1_20110220
 

자바9 특징 (Java9 Features)

  • 1. JAVA 9 Features 한창환 (Chang-Hwan Han) atin84@gmail.com
  • 2.  새로운 툴인 "JShell"을 제공 ◦ 쉘과 REPL(Read Evaluate Print Loop)을 위한 것 ◦ 자바 클래스, 인터페이스, 객체 등의 생성을 매우 쉽게 실행하고 테스트하게 해줌  REPL(Read Evaluate Print Loop) ◦ 읽고(read), 계산하고(evaluate), 출력하는(print) 반복 구조 ◦ 스크립트 언어 (interactive interpreter shell )들의 다른 명칭(예전 이름) ◦ 개발자가 간단한 코드를 입력하여 바로 결과값을 확인하게 해주는 편의성 툴  다운 가능한 곳 : https://jdk9.java.net/download/ 2
  • 3. 3 G:>jshell | Welcome to JShell -- Version 9-ea | For an introduction type: /help intro jshell> int a = 10 a ==> 10 jshell> System.out.println("a value = " + a ) a value = 10
  • 4.  불변 List, Set, Map, Map.Entry를 만들어주는 편리한 신규 팩토리 메서드 제공  비어있거나 비어있지 않은 Collection 객체를 만드는데 사용  자바8이나 이전 버전에서 우리는 Collections 클래스의 unmodifiableXXX와 같은 유틸 메서드를 사용해서 불변 Collection 객체를 만듬 ◦ 그러나 그 메서드들을 이용한 방법은 지루하고 장황 ◦ 그 단점을 없애기 위해서 새로운 팩토리 메서드를 추가. 4
  • 5.  List와 Set 인터페이스 ◦ "of" 메서드는 불변의 비어있거나 비어있지 않은 List 또는 Set을 만들어줌  Empty List Example  Non-Empty List Example 5 List immutableList = List.of(); List immutableList = List.of("one","two","three");
  • 6.  Map 인터페이스 ◦ "of ", "ofEntires “ 메서드 ◦ 불변 Map 객체나 불변 Map.Entry 객체를 만듬  Empty Map Example  Non-Empty Map Example 6 jshell> Map emptyImmutableMap = Map.of() emptyImmutableMap ==> {} jshell> Map nonemptyImmutableMap = Map.of(1, "one", 2, "two", 3, "three") nonemptyImmutableMap ==> {2=two, 3=three, 1=one}
  • 7.  Java8에서 Default와 Static 메서드를 이용해서 인터페이스에 구현체를 넣는 방법이 추가됨  하지만 private으로 구현체를 추가하는 방법이 없었기 때문에 이번에 추가되었음 7 public interface Card{ private Long createCardID(){ // Method implementation goes here. } private static void displayCardDetails(){ // Method implementation goes here. } }
  • 8.  자바9의 큰 변화 중 하나는 모듈 시스템  직소 프로젝트(Jigsaw project)는 다음과 같은 특징을 갖고 있음 ◦ Modular JDK ◦ Modular Java Source Code ◦ Modular Run-time Images ◦ Encapsulate Java Internal APIs ◦ Java Platform Module System  자바 SE 9 버전 전에는 자바 기반 응용 프로그램을 개발할 때 모노리틱 (monolithic) Jar 방식을 사용했음 ◦ 한계와 단점이 많았음 ◦ 이러한 모든 단점을 방지하기 위해, 자바 SE 9 모듈 시스템이 나옴 8
  • 9.  JDK 9는 92 모듈 (최종 릴리스에서 변경 될 수 있습니다)와 함께 함  JDK 모듈을 사용할 수 있고 아래와 같이 자신의 모듈을 만들 수 있음  Simple Module Example 9 module com.atin.monitor.ui { requires javafx.base; requires javafx.controls; requires javafx.graphics; exports com.atin.monitor.ui.launch; exports com.atin.monitor.ui.show; }
  • 10. 10
  • 11.  자바9에서 프로세스 API를 개선함  다음과 같은 두 커플 형태의 신규 클래스가 추가되었다. ◦ OS 프로세스를 관리 및 컨트롤할 있음  java.lang.ProcessHandle  java.lang.ProcessHandle.Info  Process API Example 11 ProcessHandle currentProcess = ProcessHandle.current(); System.out.println("Id: = " + currentProcess.getPid());
  • 12.  자바 7에서 나온 자원 관리 방법(try with resource)을 개선  Java 7  Java 9 12 void testARM_Before_Java9() throws IOException{ BufferedReader reader1 = new BufferedReader( new FileReader("journaldev.txt")); try (BufferedReader reader2 = reader1) { System.out.println(reader2.readLine()); } } void testARM_Java9() throws IOException{ BufferedReader reader1 = new BufferedReader( new FileReader("journaldev.txt")); try (reader1) { System.out.println(reader1.readLine()); } }
  • 13.  자바8에서 CompletableFuture가 가지는 문제점을 개선  delayedExecutor()은 static 유틸 메서드로 사용  주어진 시간 딜레이 이후에 기본 실행자로 보내진 new Executor를 반환 13 Executor exe = CompletableFuture.delayedExecutor(50L, TimeUnit.SECONDS);
  • 14.  리액티브 프로그래밍은 큰 인기를 끌고 있음  Scala, Play, Akka 등의 프레임워크는 이미 리액티브 스트림을 구축  Java9은 새로운 리액티브 스트림 API를 추가함  자바9의 리액티브 스트림 API ◦ 자바 언어를 이용해서 매우 쉽게 병행성, 확장성, 비동기 애플리케이션을 구현 한 Publish / Subscribe 프레임워크 ◦ API  java.util.concurrent.Flow  java.util.concurrent.Flow.Publisher  java.util.concurrent.Flow.Subscriber  java.util.concurrent.Flow.Processor 14
  • 15.  자바 7에서 Diamond Operator를 추가했지만, 자바 8에서 익명 내부 클래스 사용시 한계가 있다는 것을 확인  해당 이슈를 수정하였고 아래와 같은 예를 들 수 있다.  자세한 타입 파라미터 없이 단순히 "List"만을 사용하였지만 상세한 타입을 알아서 확 인해서 읽고 처리함 15 public List getEmployee(String empid){ // Code to get Employee details from Data Store return new List(emp){ }; }
  • 16.  Optional 클래스에 신규 메서드를 추가  값이 Optional 객체로 주어질 때 Stream 메서드는 값과 함께 sequential stream을 리턴, 값이 비어 있다면 빈 스트림을 리턴함  다음은 Optional에서 stream의 사용 형태를 보여준다.  위 Optional.stream 메서드는 Employee 객체의 Optional 스트림을 Employee 객 체 스트림으로 변환해줌 16 Stream<Optional> emp = getEmployee(id) Stream empStream = emp.flatMap(Optional::stream)
  • 17.  Stream 인터페이스에 사용 가능한 4개의 메서드가 추가  Stream은 인터페이스이므로 신규 구현된 메서드는 모두 default 메서드  그 중 두 개는 매우 중요 ◦ dropWhile 메서드 ◦ takeWhile 메서드  takeWhile은 인수로서의 predicate를 취하고 주어진 값의 스트림 서브셋을 리턴  해당 값을 만족시키는 값이 없으면 빈 스트림을 리턴. 17 jshell> Stream.of(1,2,3,4,5,6,7,8,9,10) .takeWhile(i -> i < 5 ) .forEach(System.out::println); 1 2 3 4
  • 18.  자바8과 이전 버전에서 @Deprecated 어느테이션 ◦ 어떤 메서드도 없이 단순히 마커 인터페이스  Java SE 9에서 Oracle Corporation은 @Deprecated 주석을 강화 ◦ 지원 중단 된 API에 대한 자세한 정보를 제공 ◦ 지원 중단 된 API의 정적 사용을 분석하는 도구를 제공  forRemoval고 since가 추가됨 (정보 제공) 18
  • 19.  추가 배경 ◦ HTTP/2 프로토콜과 WebSocket 기능을 지원하기 위함 ◦ 기존 HTTP 클라이언트 API에 많은 문제점이 있음  새로운 HTTP 2 클라이언트 API가 추가 ◦ "java.net.http" 패키지에 새로운 HTTP 2 클라이언트 API 도입 ◦ HTTP / 1.1 및 HTTP / 2 프로토콜 모두 지원 ◦ 동기화(블로킹 모드)와 비동기 모드 모두 지원 ◦ WebSocket API를 사용하여 비동기 모드 지원  상세 자료 ◦ http://download.java.net/java/jdk9/docs/api/java/net/http/package- summary.html 19
  • 20.  Java SE 9에서 새로운 multi-Resolution Image API를 도입 예정  이 API의 중요한 인터페이스는 MultiResolutionImage  java.awt.image 패키지로 이용 가능  MultiResolutionImage ◦ 서로 다른 높이와 너비 (해상도가 다름)의 이미지 세트를 캡슐화 ◦ 요구 사항을 사용하여 이미지를 쿼리 할 수 있도록 함 20
  • 21.  기타 특징 (덜 중요한 특징은 아님) ◦ GC (Garbage Collector) Improvements ◦ Stack-Walking API ◦ Filter Incoming Serialization Data ◦ Deprecate the Applet API ◦ Indify String Concatenation ◦ Enhanced Method Handles ◦ Java Platform Logging API and Service ◦ Compact Strings ◦ Parser API for Nashorn ◦ Javadoc Search ◦ HTML5 Javadoc 21