Be-Developer

JAVA 15 release

JAVA 15

  • 2020/09
  • preview 제외

    기능

    Records type

  • 쉽게 immutable data object를 만들수있는 새로운 java 클래스 타입이다.
  • 기본 포함
    • getter
    • toString (meaningful)
    • all-argument constructor
    • equals
    • hashCode
      public record Person(String name, int age){
      // 생성자 validation 가능
      public Person {
      if (age < 0) { throw new Exception("illegal");}
      }
      }
      

      sealed class JEP 409

  • 인터페이스에서 어떤 클래스가 상속할수있는지 명시할 수 있는 방식. ```java public abstract sealed class Person permits Employee, Manager { }

public final class Employee extends Person {} public non-sealed class Manager extends Person {}

- sealed 클래스를 상속하는 클래스는 추가 상속을 제한하기 위해 `final`, `non-sealed`, `sealed` 중 명시해야한다.
- if/else 문에서 instanceof를 체크하는 경우 일부 타입체크가 누락될 수 있는데, sealed 를 사용하면 컴파일러가 타입체크 누락을 warning으로 알려준다. > if/else에서는 동작하지 않는듯? jdk 17 에서 테스트함.
- 추후 pattern switch 사용시 default case 없이, 누락 없이 sealed 로 명시된 서브클래스 타입체크가 가능하다.
- pattern switch를 사용할 수 있을때 sealed 클래스의 역할이 유용해질듯.
```java
Shape rotate(Shape shape, double angle) {
    return switch (shape) {   // pattern matching switch
        case Circle c    -> c; 
        case Rectangle r -> shape.rotate(angle);
        case Square s    -> shape.rotate(angle);
        // no default needed!
    }
}

hidden classes

  • 런타임에만 뜰 수 있고, 코드내에서 다른 클래스에서 링크할 수 없다. reflection도 마찬가지.
  • 효과적인 로딩/언로딩을 위해 고안된 모델이다.

ZGC experimental 탈출

text block

  • 줄내림 등 가독성에 좋은 textblock이 정식 사용가능하다.
    return """
              <html>
    
                  <body>
                      <span>example text</span>
                  </body>
              </html>""";