자바 17에 대한 요약 ~ 자바 8에서 온 변경점 파트 1 ~

11870 단어 Javatech

Java17

  • 2021년 9월 발행
  • Java 11 이후 LTS 에디션이라 주목도 높음
  • Java 10은 이후 반년에 한 번 출시되며, LFS 출시 주기
  • 로 고정됨
  • LTE 버전의 자바 지원 기간은 3년 LTE 버전의 반년이 아니다(Oracle)

  • Java 8은 Java 11보다 최대 4년 동안 지원됩니다.
    Java8→Java17의 환승 위험은 비교적 낮죠...?
    2018년 발매된 첫 LFS(long-term support)JDK 11 이후 14개의 JEP가 담겼다.
  • 306:  엄밀성을 유지하는 부동점 의미의 부활
  • 356:  가상 랜덤 생성기 강화
  • 382:  새 macOS 렌더링 파이프라인
  • 391:  macOS/AArch 64로 마이그레이션
  • 398:  애플 API 삭제를 위한 비권장화
  • 403:  JDK 내부 패키지 강화
  • 406:  switch 모드 일치(미리 보기)
  • 407:  RMI 삭제 활성화
  • 409:  Sealed 등급
  • 410:  랩 AOT 및 JIT 컴파일러 삭제
  • 411:  Security Manager 제거를 위한 권장되지 않음
  • 412:  기타 언어 함수 및 메모리 API(인덱스)
  • 414:  Vector API(보조 색인)
  • 415:  컨텍스트별 분류 필터
  • Java 8의 변경 점


    등급


    레코드 레벨이란 무엇입니까?

  • 데이터 용기의 종류로
  • 기존의 불필요한 설명(setter/getter 등)을 배제할 수 있음
  • immutable 성질
  • Record 쓰기


    정의


    record Bike( String model, int disp, boolean big){
    }
    

    호출


    var cbr = new Bike(" 600 F 4 i", 599, true);
    
    System.println(cbr.model())
    
    정의를 기록할 때의 매개 변수 이름은 Getter가 됩니다.
    String model, int disp, boolean big){
    	 public Bike( String model, int disp, boolean big){ 
    			if( disp > 400 && !big){ 
    				throw new IllegalArgumentException( model + " should be big");
    			} else if( disp <= 400 && big){
    				 throw new IllegalArgumentException( model + " shouldn' t be big"); 
    			} 
    				this. model = model; 
    				this. disp = disp; 
    				this. big = big; 
    			}
    	 }
    
    	 public float dispAsLiter(){ 
    		 return disp / 1000. 0 f;
    	 }
    }
    
    위에서 말한 대로 구조기를 제작하여 검증할 수 있다
    방법을 따로 정의할 수도 있다.
    기본적인 사용 방법은class와 다름없다.

    주의


    immutable의 성질이 있습니다 = setter가 존재하지 않습니다
    이후에는 필드 값을 덮어쓸 수 없습니다.
    예를 들어 데이터베이스에서 검색한 데이터를 가공 설정하여 파일로 출력할 수 없다.

    실제 상황


    사실은 자바예요.lang.Record 클래스를 상속하는 class로 컴파일됩니다.
    모든 필드는final로 정의됩니다.(immutable의 정체)
    Getter와 유니버설 코드 등이 구조기를 정의했다.
    Compiled from "Bike. java" 
    final class Bike extends java. lang. Record { 
    	Bike( java. lang. String, int, boolean); 
    	public final java.lang. String toString(); 
    	public final int hashCode();
    	public final boolean equals( java. lang. Object); 
    	public java. lang. String model(); 
    	public int disp(); 
    	public boolean big(); 
    }
    

    Sealed


    자바의 학급과 인터페이스(앞으로'유형'을 정리)는 누구나 계승할 수 있고final선언은 누구도 계승할 수 없는 0이나 100개의 선택이다.
    이에 비해 명확하게 지정된 유형의 계승만 허용하는 메커니즘이다.
    슈퍼타입의 저자가 상속인을 명확히 지목할 수 있기 때문에 API의 통합성을 체계적으로 보호하는 것이 큰 장점이다.

    사용법


    public sealed interface Motor permits RocketMotor, MotorBike, Car {}
    
    클래스 인터페이스 성명 전에 sealed 발표
    형식 후perits문장을 즉시 설명합니다. (permits의 클래스가 같은 원본에만 있으면 perrmits를 생략할 수 있습니다)
    permits 문장에서 쉼표 구분자로 계승할 수 있는 type을 명확하게 표시합니다

    상속 제한


    permits 문장에서 지정한 하위 형식의 계승 제한을 계승하지 않습니다.
    따라서 Sealed인지 여부를 명확히 밝혀야 합니다.
  • 하위 유형도Sealed로 설정하여 상속인을 제한하려면 sealed선언
  • Sealed를 원하지 않는 상황에서non-sealed선언
  • 계속 계승하고 싶지 않으면final선언
  • .

    구속


    permits 문장에서 지정한 type은 같은 모듈 안에 있어야 합니다.

    상세히 보기


    https://www.infoq.com/jp/articles/java-sealed-classes/

    HTTP/2 지원


  • 동기식/비동기식
    HttpClient는 동기식 커뮤니케이션뿐만 아니라 비동기식 커뮤니케이션도 지원합니다.
    Compuletable Future에서 응답을 받을 수 있기 때문에 비동기적인 전제에서 응답을 받은 후의 처리를 설명할 수 있습니다.

  • ReactiveStream
    FlowAPI를 사용하는 Reactive Stream에서 HttpClient를 처리할 수 있습니다.
    단, 플로우의 설치나 Akka Streams 등의 설치 클래스와 함께 사용해야 합니다.
  • 참고 자료


  • WEB + DB PRESS

  • 갑골문 공식
    oracle.com/jp/news/announcement/java17-jp-2021-09-17/

  • JEP
    https://openjdk.java.net/projects/jdk/17/
  • 좋은 웹페이지 즐겨찾기