PersesTitan(페르) 기술블로그

[Java21] jdk21 새로운 기능 1 사용해보기 (formatted) 본문

Language/Java

[Java21] jdk21 새로운 기능 1 사용해보기 (formatted)

PersesTitan(페르) 2023. 9. 26. 16:15

jdk21로 올라오면서 새로운 방식의 format이 추가 되었습니다. 평소에 자바는 format에 대한 지원이 약하다고 생각이 들어왔지만 이제는 해당 부분들을 해결할려고 하는 것 처럼 보였습니다.

기존 format

StringBuilder 방식

int a = 1;
int b = 2;
StringBuilder value = new StringBuilder()
        .append(a)
        .append(" + ")
        .append(b).append(" = ")
        .append(a + b);
System.out.println(value);

String.format 방식

int a = 1;
int b = 2;
String value = String.format("%d + %d = %d", a, b, a + b);
System.out.println(value);

+ 연산자 방식 

int a = 1;
int b = 2;
String value = a + " + " + b + " = " + (a + b);
System.out.println(value);

 

(jdk 21)

formatted 사용법

보통 static으로 가져오는 String.format과 다른게 String내부 함수로 선언되어 있다는 특징을 가지는 특징으로 변경되었습니다.

int a = 1;
int b = 2;
String value = "%d + %d = %d".formatted(a, b, a + b);
System.out.println(value);

응용 버전

format을 할때 순서를 변경하여 format을 하는 방법입니다. 포맷 인수 사이에 <숫자>$형태로 format순서를 지정하는 방법을 이용하여 순서를 변경하는 방법은 다음과 같습니다.

(ex. %d -> %1$d)

 

다음 예제는 3, 2, 1순서대로 format을 하였기 때문에 a + b, b, a 순서대로 format이 되는 것을 확인 할 수 있었습니다.

 

int a = 1;
int b = 2;
String value = "%3$d + %2$d = %1$d".formatted(a, b, a + b);
System.out.println(value);

출력

3 + 2 = 1

 

기타

jdk21 릴리즈 노트에 STR template라는 것도 추가된 듯 보이는데 jshell에서 --enable-preview옵션을 넣어야지 동작을 하는 듯 보였습니다.

jshell --enable-preview

 

--enable-preview 옵션을 주지 않으면 다음과 같이 에러가 발생하더군요.