java9 특징 훑어보기

52
Java 9 유현석 [email protected] software campus

Upload: duriepark-

Post on 14-Feb-2017

2.534 views

Category:

Engineering


5 download

TRANSCRIPT

Page 1: Java9 특징 훑어보기

Java 9유현석

[email protected]

software campus

Page 2: Java9 특징 훑어보기

Java 9

software campus

1. Java 버젼 히스토리 2. 알아두면 좋을 내용들 - JCP, JSR, JEP 3. Java 9 에서 변화된 부분 4. Jigsaw project (주요 프로젝트) 5. Java 9에서 자주 사용할만한 것들 6. Java 9, 그 이후

Page 3: Java9 특징 훑어보기

Java 9

software campus

1. Java 의 버젼 히스토리

Page 4: Java9 특징 훑어보기

1. Java의 버젼 히스토리

software campus

Java 9

Java 의 현재까지의 버젼 출시과정

참고, Arkadiusz Sokolwski 2015

Page 5: Java9 특징 훑어보기

1. Java의 버젼 히스토리

software campus

Java 9

http://openjdk.java.net/projects/jdk9/

연기

Page 6: Java9 특징 훑어보기

1. Java의 버젼 히스토리

software campus

Java 9

Java 9 릴리즈 되는 시점 - 연기이유https://www.infoq.com/news/2015/12/oracle-confirms-delayed-java9

Project Jigsaw

Page 7: Java9 특징 훑어보기

Java 9

software campus

2. 알아두면 좋을 내용들 - JCP, JSR, JEP

Page 8: Java9 특징 훑어보기

2. 알아두면 좋을 내용들 - JCP, JSR, JEP

software campus

Java 9

(Java 8 이후 일정) . Java 8 이후에는 2년 간격으로 새로운 버전을 내놓을 예정 . Java 8 에 Self-Tuning JVM, Native 지원 강화, Big Data (2GB 이상 지원), Tail Calls/Continuation, Meta-Object 프로토콜, Multi-Tenancy, 자원 관리 등 . Java 9의 JDK9에 대해 알고 싶으면 다음의 두 사이트를 참고하기 바란다.

- http://openjdk.java.net/projects/jdk9 - http://jdk9.java.net

Page 9: Java9 특징 훑어보기

2. 알아두면 좋을 내용들 - JCP, JSR, JEP

software campus

Java 9

(JDK 9) - JDK 9 프로젝트의 목적은 Java SE 9 플랫폼의 오픈소스 참조문서를 만들어 내는 것이다. 또한 JCP 체제하에서 이번의 JSR(Java 상세 명세서)을 정의하는 것이다.(The goal of this Project is to produce an open-source reference implementation of the Java SE 9 Platform, to be defined by a forthcoming JSR in the Java Community Process.)

이번 릴리즈 버젼의 스케쥴과 특징은 JEP 2.0의 제안에 의해 개정된 JEP 과정을 통해 제안되고, 추적된다. (The schedule and features of this release are proposed and tracked via the JEP Process, as amended by the JEP 2.0 proposal.)

Page 10: Java9 특징 훑어보기

2. 알아두면 좋을 내용들 - JCP, JSR, JEP

software campus

Java 9

(용어정리)*JCP(Java Community Process) : Java 기술의 표준 기술 명세서를 개발하는 체제(시스템)이다. (The JCP is the mechanism for developing standard technical specifications for Java technology.)

*JSR(Java Specification Requests Java 요구사항 상세 명세서) : Java 플랫폼에 제안된 실제 명세서와 최종결정된 명세서

(Java Specification Requests (JSRs) are the actual descriptions of proposed and final specifications for the Java platform.)

*JEP(JDK Enhancement Proposal) : Java Development Kit 과 OpenJDK을 향상시키기 위한 제안들을 모으는 오라클의 밑그림을 그리는 처리방법 이다. 오라클에서 JEP는 JDK 릴리즈 프로젝트와 연관된 노력에 대한 장기 로드맵 역할을 한다.

(The JDK Enhancement Proposal (or JEP) is a process drafted by Oracle Corporation for collecting proposals for enhancements to the Java Development Kit and OpenJDK. In the words of Oracle, the JEP serve as the long-term Roadmap for JDK Release Projects and related efforts.)

Page 11: Java9 특징 훑어보기

2. 알아두면 좋을 내용들 - JCP, JSR, JEP

software campus

Java 9

OpenJDK

Sun(현재 Oracle)이 JDK 7을 개발하기 시작할 때 이전과 다른 점이 하나 있었는데, Sun이 JDK를 오픈소스화 하기 위해 2007년 OpenJDK를 만들었다는 것이다. (OpenJDK는 완전한 Free의 오픈소스 코드를 기반으로 Fully buildable한 Java Development Kit을 배포하기 위한 Sun의 노력이다.)

Sun이 3rd-Party 라이브러리의 저작권자에게 오픈소스로 공개할 수 있도록 설득하고자 했으나 잘되지 않았고, 저작권자가 오픈소스화를 거부한 일부 컴포넌트를 제외한 나머지 JDK 소스코드 전부를 OpenJDK에 제공했고, OpenJDK는 이를 기반으로 이외의 컴포넌트들의 대안 코드를 마련하면서 JDK7 프로젝트를 시작했다.

참고 : http://stunstun.tistory.com/222

Page 12: Java9 특징 훑어보기

2. 알아두면 좋을 내용들 - JCP, JSR, JEP

software campus

Java 9

OpenJDK vs OracleJDK

Oracle JDK는 OpenJDK의 JDK7 기반에 추가로 OpenJDK에 포함되지 않은 Component까지 모두 갖춘 프로젝트이다.

아래와 같이 Vendor에 의한 분리된 Version이 존재하는데, . Oracle’s JDK (Commertial support from oracle) . OpenJDK, the open source java

JDK7 이전 OpenJDK는 Oracle JDK에 비해 누락된 기능 및 성능이슈가 존재 현재는 *java-web-plugin(http://en.wikipedia.org/wiki/IcedTea - 저작권이 있는 라이브러리의 대안으로 작성된)을 제외하고는 정확하게 같다고 볼 수 있다. 몇몇 사람들은 아직도 OpenJDK가 Oracle JDK에 비해 성능이 떨어진다고 하지만, 이것은 근거없는 말이다.

두 Version은 모두 Java SE 7 JSR(JSR 336) Spec 을 구현하였다.

*IcedTea : 개발자들이 OpenJDK를 좀 더 쉽게 빌드하고 배포하는데 초점을 맞춘 프로젝트이다.

참고 : http://stunstun.tistory.com/222

Page 13: Java9 특징 훑어보기

Java 9

software campus

3. Java 9 에서 변화된 부분

Page 14: Java9 특징 훑어보기

3. Java 9 에서 변화된 부분

software campus

Java 9

http://openjdk.java.net/projects/jdk9/

Page 15: Java9 특징 훑어보기

3. Java 9 에서 변화된 부분

software campus

Java 9

JEPs targeted to JDK 9, so far

Page 16: Java9 특징 훑어보기

3. Java 9 에서 변화된 부분

software campus

Java 9

JEPs targeted to JDK 9, so far

Page 17: Java9 특징 훑어보기

3. Java 9 에서 변화된 부분

software campus

Java 9

JEPs targeted to JDK 9, so far - 체크 해볼만한 내용들( Jigsaw Project ) 200 : The Modular JDK 201 : Modular Source Code 275 : Modular Java Application Packaging

110 : HTTP 2 Client

223 : New Version-String Scheme

( deprecated ) 289 : Deprecate the Applet API 211 : Elide Deprecation Warnings on Import Statements 214 : Remove GC Combinations Deprecated in JDK 8 277 : Enhanced Deprecation

224 : HTML5 javadoc 222 : jshell : The Java Shell ( Read-Eval-Print Loop)

Page 18: Java9 특징 훑어보기

Java 9

software campus

4. Jigsaw project (주요 프로젝트)

Page 19: Java9 특징 훑어보기

4. Jigsaw project (주요 프로젝트)

software campus

Java 9

Jigsaw Project

jigsaw 는 프로젝트로 따로 떨어져 있으며, JSR 번호 중에 옆에 적혀있는 것들을 체크해 보면 될것 같다.

Page 20: Java9 특징 훑어보기

4. Jigsaw project (주요 프로젝트)

software campus

Java 9

Page 21: Java9 특징 훑어보기

software campus

Java 9 Jigsaw 그림

4. Jigsaw project (주요 프로젝트) Java 9

Page 22: Java9 특징 훑어보기

software campus

Eclipse Neon with Java 9 Jigsaw

4. Jigsaw project (주요 프로젝트) Java 9

Page 23: Java9 특징 훑어보기

software campus

Java 8

4. Jigsaw project (주요 프로젝트) Java 9

Java 9

Page 24: Java9 특징 훑어보기

software campus

Motivation : . JAR/classpath hell reduction . unexpressed/transitive dependencies . manual dependencies management . hide some (private) packages; com.sun.misc.* . system instead of manual security . JRE size reduction

4. Jigsaw project (주요 프로젝트) Java 9

Page 25: Java9 특징 훑어보기

software campus

Jigsaw 자주 사용하는 라이브러리 그림

4. Jigsaw project (주요 프로젝트) Java 9

Page 26: Java9 특징 훑어보기

software campus

Modules for Java - Jigsaw

4. Jigsaw project (주요 프로젝트) Java 9

Page 27: Java9 특징 훑어보기

software campus

Jigsaw example

module com.foo.app{ requires com.foo.bar; requires java.sql; }

module java.sql{ requires java.logging; requires java.xml; exports java.sql; exports javax.sql; exports javax.transaction.xa; }

4. Jigsaw project (주요 프로젝트) Java 9

Page 28: Java9 특징 훑어보기

software campus

Jigsaw example

4. Jigsaw project (주요 프로젝트) Java 9

Page 29: Java9 특징 훑어보기

software campus

Jigsaw - implied readabilitymodule java.sql{ requires public java.logging; requires public java.xml; exports java.sql; exports javax.sql; exports javax.transaction.xa;}

4. Jigsaw project (주요 프로젝트) Java 9

Page 30: Java9 특징 훑어보기

software campus

Jigsaw - implied readability

String url = …;Properties props = …;Driver d = DriverManager.getDriver(url);Connection c = d.connect(url,props);d.getParentLogger().info(“Connection acquired”);

4. Jigsaw project (주요 프로젝트) Java 9

Page 31: Java9 특징 훑어보기

software campus

implied readability

4. Jigsaw project (주요 프로젝트) Java 9

Page 32: Java9 특징 훑어보기

software campus

Jigsaw - services

module com.mysql.jdbc{ requires java.sql; requires org.slf4j; exports com.mysql.jdbc;}

4. Jigsaw project (주요 프로젝트) Java 9

Page 33: Java9 특징 훑어보기

software campus

Jigsaw - services

module java.sql{ requires public java.logging; requires public java.xml; exports java.sql; exports javax.sql; exports javax.transaction.xa; uses java.sql.Driver;}

4. Jigsaw project (주요 프로젝트) Java 9

Page 34: Java9 특징 훑어보기

software campus

Jigsaw - servicesmodule com.mysql.jdbc{ requires java.sql; requires org.slf4j; exports com.mysql.jdbc; provides java.sql.Driver with com.mysql.jdbc.Driver;}

4. Jigsaw project (주요 프로젝트) Java 9

Page 35: Java9 특징 훑어보기

software campus

Jigsaw - services

4. Jigsaw project (주요 프로젝트) Java 9

Page 36: Java9 특징 훑어보기

software campus

Jigsaw - qualified exportsmodule java.base{ … exports sun.reflect to java.corba, java.logging, java.sql, java.sql.rowset, jdk.scripting.nashorn;}

4. Jigsaw project (주요 프로젝트) Java 9

Page 37: Java9 특징 훑어보기

software campus

Jigsaw - qualified exports

4. Jigsaw project (주요 프로젝트) Java 9

Page 38: Java9 특징 훑어보기

Java 9

software campus

5. Java 9에서 자주 사용할만한 것들. 223 : New Version-String Scheme . 110 : HTTP 2 Client

( deprecated ) . 289 : Deprecate the Applet API . 211 : Elide Deprecation Warnings on Import Statements . 214 : Remove GC Combinations Deprecated in JDK 8 . 277 : Enhanced Deprecation

Page 39: Java9 특징 훑어보기

software campus

Java 9

. 223 : New Version-String Scheme -1

참고, Arkadiusz Sokolwski 2015

5. Java 9에서 자주 사용할만한 것들

Page 40: Java9 특징 훑어보기

software campus참고, Arkadiusz Sokolwski 2015

• MAJOR.MINOR.SECURITY

1.8.0 -> 8.0.01.8.0_05 -> 8.0.11.8.0_11 -> 8.0.21.8.0_20 -> 8.1.21.8.0_25 -> 8.1.3

Java 95. Java 9에서 자주 사용할만한 것들

. 223 : New Version-String Scheme -2

Page 41: Java9 특징 훑어보기

software campus

Java 95. Java 9에서 자주 사용할만한 것들

. 223 : New Version-String Scheme -3

http://openjdk.java.net/jeps/223

Page 42: Java9 특징 훑어보기

software campus

Java 9

참고, Arkadiusz Sokolwski 2015

HttpReponse response = HttpRequest .create(new URI(“http://www.ocado.com”)) .body(noBody()) .GET().send();int responseCode = response.responseCode();String responseBody = response.body(asString());System.out.println(responseBody);

. 110 : HTTP 2 Client -1

5. Java 9에서 자주 사용할만한 것들

Page 43: Java9 특징 훑어보기

software campus참고, Arkadiusz Sokolwski 2015

HttpReponse response = HttpRequest .create(new URI(“http://www.ocado.com”)) .body(noBody()) .GET();CompletableFuture<HttpResponse> asyncResp = req.sendAsync();Thread.sleep(10);if(!asyncResp.isDone()){ asyncResp.cancel(true); System.err.println(“timeout”); return;}HttpResponse réponse = asyncResp.get();

Java 95. Java 9에서 자주 사용할만한 것들

. 110 : HTTP 2 Client -2

Page 44: Java9 특징 훑어보기

software campus

( deprecated ) 289 : Deprecate the Applet API 211 : Elide Deprecation Warnings on Import Statements 214 : Remove GC Combinations Deprecated in JDK 8 277 : Enhanced Deprecation

Java 95. Java 9에서 자주 사용할만한 것들

Page 45: Java9 특징 훑어보기

software campus

( deprecated ) 289 : Deprecate the Applet API

Java 95. Java 9에서 자주 사용할만한 것들

웹 브라우저 업체들의 Java Browser Plug-in의 삭제로 인해, 앞으로 개발되는 Java 프로그램들은 Web Start 프로그램 형태나 Installable 어플리케이션 형태로 개발 유도

Page 46: Java9 특징 훑어보기

software campus

( deprecated ) 211 : Elide Deprecation Warnings on Import Statements

Java 95. Java 9에서 자주 사용할만한 것들

자바 SE 8에서, 자바 컴파일러는 사용되지 않는 유형이 이름으로 가져올 때 또는 사용되지 않는 멤버 (메서드, 필드, 중첩 된 유형) 정적으로 가져올 때 사용 중단 경고를하기 위해 Java 언어 사양의 합리적인 해석이 필요하다. 사용하지 않는 부분의 경고에 대한 부분이 Deprecate 되는 것 같다.

Page 47: Java9 특징 훑어보기

software campus

( deprecated ) 214 : Remove GC Combinations Deprecated in JDK 8

Java 95. Java 9에서 자주 사용할만한 것들

이전에 JEP 173를 통해 JDK 8에서 사용되지 않는 한 GC 조합을 제거한다.

Page 48: Java9 특징 훑어보기

software campus

( deprecated ) 277 : Enhanced Deprecation

Java 95. Java 9에서 자주 사용할만한 것들

사용되지 않는 주석을 개조하고, API 수명주기를 강화하는 도구를 제공

Page 49: Java9 특징 훑어보기

Java 9

software campus

6. Java 9, 그 이후

Page 50: Java9 특징 훑어보기

5. Java 9, 그 이후

software campus

Java 9

java 10 : value classes

value class Point{ int x; int y; Point(int x, int y){ this.x = x; this.y = y; }}

Page 51: Java9 특징 훑어보기

5. Java 9, 그 이후

software campus

Java 9

java 10 : generics

Reified GenericsGenerics with values

List<int> intList = new ArrayList<>();… int val = intList.get(0);class List$Point{ Point get(Point index); }

Page 52: Java9 특징 훑어보기

Java 9

software campus

감사합니다. ^^ Q & A