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 옵션을 주지 않으면 다음과 같이 에러가 발생하더군요.