Java의 새로운 기능

Java 13의 새로운 기능

늦깎이_개발자 2024. 6. 6. 16:24
반응형

1. Preview 기능

비록 Preview 모드이지만, Java 13dms 2가지 새로운 기능을 제공한다. 이것들은 피드백에 따라 제거될 수도 있고 영원히 반영될 수도 있다. Preview 기능들을 사용하기 위해서는 커멘드 라인에 -enable-preview를 명시해야 한다.

 

1.1 Switch 구문 (Preview)

우리는 새로운 Switch 구문에 대해 Java 12에서 이미 본 적이 있다. Java 13에서는 yield 구문이 추가되었다.

yield를 사용함으로써, 우리는 switch 구문에서 값을 효과적으로 반환할 수 있다.

@Test
@SuppressWarnings("preview")
public void whenSwitchingOnOperationSquareMe_thenWillReturnSquare() {
    var me = 4;
    var operation = "squareMe";
    var result = switch (operation) {
        case "doubleMe" -> {
            yield me * 2;
        }
        case "squareMe" -> {
            yield me * me;
        }
        default -> me;
    };

    assertEquals(16, result);
}

 

1.2 텍스트 블록 (Preview)

두 번째 Preview 기능은 JSON, XML, HTML과 같은 멀티 라인 String에 대한 텍스트 블록이다.

이전 버전에서는 JSON을 아래와 같이 선언해야 했다.

String JSON_STRING 
  = "{\r\n" + "\"name\" : \"Baeldung\",\r\n" + "\"website\" : \"https://www.%s.com/\"\r\n" + "}";

 

이제 텍스트 블록을 사용하여 아래와 같이 선언할 수 있다.

String TEXT_BLOCK_JSON = """
{
    "name" : "Baeldung",
    "website" : "https://www.%s.com/"
}
""";

 

예시에서 볼 수 있듯이, 쌍따옴표나 개행문자를 위해 이스케이프 문자를 사용할 필요가 없다. 텍스트 블록을 사용함으로써, JSON과 같은 멀티 라인 String을 더 쉽게 쓰고 읽을 수 있게 되었다.

 

아래와 같이 텍스트 블록에 대해 모든 String 메서드들을 사용하는 것이 가능하다.

@Test
public void whenTextBlocks_thenStringOperationsWorkSame() {        
    assertThat(TEXT_BLOCK_JSON.contains("Baeldung")).isTrue();
    assertThat(TEXT_BLOCK_JSON.indexOf("www")).isGreaterThan(0);
    assertThat(TEXT_BLOCK_JSON.length()).isGreaterThan(0);
}

 

또한 String class는 텍스트 블록을 다루기 위한 3가지 새로운 메서드를 제공한다.

1) stripIndent() – 부수적인 white space를 제거한다.
2) translateEscapes() – 이스케이프 문자를 해석한다. (예 : “\\t” -> “\t”)
3) formatted() – String::format 메서드와 동일하게 동작하지만 텍스트 블록을 위한 메서드이다.

 

아래는 formatted() 메서드에 대한 예시이다.

assertThat(TEXT_BLOCK_JSON.formatted("baeldung").contains("www.baeldung.com")).isTrue();
assertThat(String.format(JSON_STRING,"baeldung").contains("www.baeldung.com")).isTrue();

 

2. 레거시 Socket API에 대한 재구현

Socket API(java.net.Socket, java.net.ServerSocket)은 자바에 내장된 부분으로써 사용되어져 왔다. 그러나 이것들은 지난 20년간 최적화되지 않았다. 레거시 자바로 쓰여진 코드들은 다루기 힘들고 유지보수하기 어렵다.

Java 13은 API를 미래 지향적인 사용자 모드 스레드에 맞게 기본 구현을 대체했다. PlainSocketImpl 대신에 이제 NioSocketImpl를 제공한다. 새롭게 작성된 코드는 java.nio와 같은 내부 인프라스트럭처를 기반으로 한다.

물론 PlainSocketImpl를 다시 사용하는 것도 가능하다. JVM의 시스템 프로퍼티 Djdk.net.usePlainSocketImpl를 true로 주면된다. 디폴트는 NioSocketImpl이다.

 

 

※ 참조

https://www.baeldung.com/java-13-new-features

 

반응형