ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Java10이 당신의 코드 방식을 어떻게 바꿀 것인가
    JAVA 2018. 2. 28. 07:21
    반응형

    이 문서는 영문으로된 내용을 구글 번역기를 활용하여 번역한 내용입니다. 
    개인적인 공부 및 추후 다시 볼 수 있도록 하기 위해 개인 블로그에 번역 내용을 옮겨 놓았습니다.
    원문과 내용이 다를시 책임지지 않으며, 저작권 문제가 발생시 언제든 삭제 될 수 있습니다. 

    원문보기 : https://blog.takipi.com/how-java-10-will-change-the-way-you-code/


    Java10이 당신의 코드 방식을 어떻게 바꿀 것인가

    Java 10에 포함될 새로운 Java 로컬 변수 유형 추론 기능 강조 표시

    2016 년에 JEP (JDK Enhancement Proposal)가 Java 커뮤니티에서 파도를 일으키고 있었습니다 : JEP 286. 2년 후, 로컬 변수 유형 추론은 틀림없이 Java 10에서 가장 주목할만한 기능입니다. Java 언어 개발자는 Java 응용 프로그램 작성을 단순화하기 위해 노력하고 있습니다.

    다음 글에서 우리는 이 모든 것이 무엇을 의미하는지, 그리고 그것이 당신의 코드에 어떻게 영향을 미칠 것인지 설명할 것입니다.

    PS. 자바 10에 대한 카운트다운을 보려면 여기서 다음 릴리스에 대한 자세한 내용을 확인하십시오!

    지역 변수 유형 추론 중단

    이 새로운 기능은 Java에 구문 설탕을 추가하여 단순화하고 개발자 경험을 향상시킵니다. 새로운 구문은 정적 유형 안전에 대한 약속을 유지하면서 Java 작성과 관련된 장황함을 줄입니다.

    즉, 관련 유형을 지정할 필요 없이 변수를 선언할 수 있습니다. 다음과 같은 선언이 :


    List<String> list = new ArrayList<String>();
    Stream<String> stream = getStream();

    새롭고 단순화된 구문으로 대체 될 것입니다.


    var list = new ArrayList<String>();
    var stream = getStream();

    보시다시피, 로컬 변수 유형 추론은 변수 유형의 명시적 지정을 요구하기보다는 'var'키워드의 사용을 소개합니다.

    Java는 조금 장황한 것으로 알려져 있습니다. 기능이 작성되었을 때 여러분이나 다른 개발자가 염두에 두었던 것을 이해하는 데 유용 할 수 있습니다. 그러나 자바에서 소프트웨어를 개발하는 것이 너무 지루하다고 생각하는 사람들에게는이 기능이 큰 변화를 의미합니다.

    타입 추론은 Java의 새로운 개념은 아니지만 지역 변수에 대한 새로운 개념입니다.

    Generics가 소개되었을 때 Java 5에서 모두 시작되었습니다. 그런 다음 다이아몬드 연산자 (<>)를 사용하여 Java 7 (Project Coin의 일부로)에서 더 개발되어 ArrayList <> 유형에 바인딩되지 않고 목록을 초기화하고 Java 8에서 Lambda Formals를 사용할 수 있습니다. 다이아몬드 연산자를 사용하면 다음 코드를 작성할 수 있습니다.


    List<String> list = new LinkedList<String>();

    이제 Oracle 팀은 한 걸음 더 나아가고 있습니다.

    커뮤니티 응답

    JEP 286이 실제로 JEP가 되기 전에 ... Java 커뮤니티가 제안에 대해 어떻게 느꼈는지 더 잘 이해하기 위해 Oracle이 설문 조사를 실시했습니다. 대부분의 경우, 설문 조사는 제안에 대한 전반적인 감정과 커뮤니티가 어떻게 구현해야 한다고 생각했는지에 중점을 두었습니다. 응답한 2,453 명의 개발자 중 결과는 대부분 긍정적이었습니다.

    설문 조사 질문:제안된 지역 변수 유형 추론의 전반적인 특징에 대해 어떻게 생각하십니까?

    설문 조사의 두 번째 부분은 C #, Scala, Swift, C ++와 같은 다른 언어에서 비슷한 사용을 기반으로 선택하거나 'let'을 사용하는 5 가지 옵션을 제안하는 잠재적 구문 선택에 중점을 두었습니다.

    대부분의 사용자는 var / val 옵션에 투표했습니다.

    가능한 구문 옵션

    결국 팀은 2 번째로 인기있는 선택 인 var 만 사용하기로 결정했습니다.

    대부분의 Java 커뮤니티 회원은 이 새로운 옵션을 승인 한 것으로 보입니다. 많은 사람들이 오라클에 "시대에 맞춰달라고"요청했습니다. 이 기능에 반대하는 소수의 개발자는 Java에서 첫 발을 내딛는 사람들에게는 어려울 수도 있다고 주장하거나 기존 구문이 "자세한 정보와 읽기 쉽도록 올바르게 조합 된"것이라고 지적합니다.

    물론 JEP 286 요약 페이지에서 새 기능을 추가하기위한 다음과 같은 정당성을 찾을 수 있습니다.

    "Java는 지역 변수 유형 추론을 채택하지 않은 거의 정적으로 형식화 된 언어이다. 이 시점에서 이것은 더 이상 논란의 여지가 없어야한다 "

    이것이 여러분의 코드에 어떤 영향을 미칠까요?

    우리 시스템에서 새로운 기능에 대한 모든 흥미를 얻고 나면, 우리가 일반적으로 묻기를 원하는 첫 번째 질문은 다음과 같습니다. 이것이 내 코드에 어떤 영향을 미칩니까? 기능 요약에서 "Java에서 필요한 상용구 코딩의 정도"가 주요 동기로 처리되므로 향후 매니페스트 유형 선언을 생략 할 수 있습니다.

    보다 구체적으로, 치료는 다음으로 제한 될 것입니다 :

    • Local variables with initializers

    • Indexes in the enhanced for-loop

    • Locals declared in a traditional for-loop

    오라클의 Java 팀은 다음과 같은 기능을 사용할 수 없다고 말합니다.

    • Method parameters

    • Constructor parameters

    • Method return types

    • Fields

    • Catch formals (or any other kind of variable declaration)

    이전 버전의 Java를 지원하겠다는 Java의 약속으로 인해 이전 버전과의 호환성을 저해하지 않는다고 가정 할 수 있습니다.

    추가 : GC 개선 및 기타 관리

    JDK 10에는 현재 GC (Garbage Collection) 요소를 개선하는 데 초점을 맞춘 JEP가 2 개 있습니다. 첫 번째 가비지 콜렉터 인터페이스 (JEP 304)는 다른 가비지 콜렉터의 소스 코드 분리를 향상시키는 데 도움이되는 깨끗한 가비지 콜렉터 인터페이스를 도입합니다.

    현재 Java 버전에는 HotSpot 소스 전체에 흩어져있는 GC 소스 파일이 있습니다. 개발자는 이러한 소스 파일을 찾을 위치를 알아야 하므로 새 가비지 수집기를 구현할 때 이 문제가 발생합니다. 이 JEP의 주요 목표 중 하나는 HotSpot 내부 GC 코드에 대해 더 나은 모듈성을 도입하고 GC 인터페이스를보다 명확하게하며 새로운 수집기를 쉽게 구현할 수있게하는 것입니다.

    Java 10 용으로 예정된 두 번째 JEP는 G1 (JEP 307) 용 Parallel Full GC로 전체 GC를 병렬화하여 G1 최악의 대기 시간을 개선하는 데 중점을 둡니다. G1은 Java 9에서 기본 GC로 만들어졌으며이 JEP의 목표는 G1을 병렬로 만드는 것입니다.

    Java 10에 예정된 다른 기능 중에는 다음과 같은 것이 있습니다.

    • 스레드 로컬 핸드 셰이크 (JEP 312) - 스레드에서 콜백을 실행하는 새로운 방법을 소개하므로 모든 스레드가 아닌 개별 스레드를 중지하거나 모두 중지 할 수 있습니다.

    • 대체 메모리 장치의 힙 할당 (JEP 316) - HotSpot VM이 사용자가 지정하는 대체 메모리 장치에 Java 오브젝트 힙을 할당 할 수 있도록 허용합니다.

    • 추가 유니 코드 언어 - 태그 확장 (JEP 314) - 목표는 java.util.Locale 및 관련 API를 향상시켜 언어 태그 구문 (BCP 47)의 유니 코드 확장을 추가로 구현할 수있게하는 것입니다.

    • 실험적 Java 기반 JIT 컴파일러 (JEP 317) - Oracle은 Java JIT 컴파일러 인 Graal을 Linux / x64 플랫폼에서 시험용 JIT 컴파일러로 사용할 수 있기를 원합니다.

    • 루트 인증서 (JEP 319) - 오라클의 Java SE에서 루트 인증서 소스를 오픈하는 것이 목표입니다.

    • OpenJDK가 개발자에게 더 매력적으로 만드는 루트 인증 기관 (CA) 프로그램. 또한 OpenJDK와 Oracle JDK 빌드의 차이를 줄이는 것을 목표로합니다.

    • JDK 포레스트를 단일 저장소로 통합하기 (JEP 296) -이 JEP의 주요 목적은 하우스 키핑을 수행하고 JDK 포리스트의 수많은 저장소를 단일 저장소로 결합하는 것입니다.

    • Native-Header Generation Tool (javah) 제거하기 (JEP 313) - 이것은 명백하고 중요한 사항입니다. JDK에서 javah 도구를 제거하십시오.

    집에서 이것을 시도해 주세요

    다른 모든 JDK 릴리스와 마찬가지로 Oracle은 이미 Java 사용자가 다운로드하여 새로운 기능을 테스트할 수 있는 Early Access Release를 만들었습니다. 사실, 이 JEP는 2016년 초부터 시험 운전에 이용 가능했는데, 무엇을 기다리고 있나요?

    아직 JDK 9로 이사할 생각을 하지 않았더라도 새로운 기능을 느끼고 플랫폼 디자이너에게 피드백을 줄 수 있는 기회를 얻는 것은 새로운 버전에 대해 배우고 커뮤니티에 영향을 미치는 좋은 방법입니다.

    마지막 생각들

    우리는 최근 자바 플랫폼 개발을 특히 면밀하게 지켜보고 있습니다. 지난 9월에 자바 9를 출시한 이후로 플랫폼 전체가 180도 바뀐 것 같습니다. 그들은 우리를 모듈형 Java에 소개했고 MarkReinhold는 JDK10은 2018년 3월에 출시될 것이고 Java는 6개월의 릴리즈 사이클로 전환할 것이라고 발표했습니다.

    Project Jigsaw와 같은 괴물 같은 기능 프로젝트에 의해 지켜지고 있는 새로운 Java 버전을 기다릴 필요가 없습니다. 이제 우리는 6 개월마다 새 버전을 제공 할 예정이며, 2018 년 9 월 JDK11부터 3 년마다 장기 지원 버전이 나옵니다.

    기본적으로, 너무 편안하게 지내지 마세요. 오라클은 앞으로 몇년 동안 자바 플랫폼을 개발할 큰 계획을 가지고 있습니다. 하지만 현재로서는 자바 9의 가장 우수한 기술을 여기서 우리의 부사장인 Niv Steingarten과 함께 따라잡아야 합니다.

    반응형
Designed by Tistory.