본문 바로가기
language/java

Text Block(Java 15)

by 죄니안죄니 2026. 6. 17.
반응형

이번 글은 Java 15부터 정식으로 지원되는 문법으로,

SQL, JSON, HTML처럼 여러 줄 문자열(Multi-line String)을 훨씬 읽기 쉽게 작성하기 위해 등장한 기능

이다.

실무에서 MyBatis, JPA Native Query, JSON 샘플, HTML 템플릿을 작성할 때 매우 자주 사용된다.


Text Block(Java 15)

여러 줄 문자열(Multi-line String)을 가독성 좋게 표현하기 위한 새로운 문자열 문법


기존 Java의 문제점

Java는 오랫동안 문자열을 이렇게 작성했다.

 
String sql =
    "SELECT * \n" +
    "FROM USER \n" +
    "WHERE AGE >= 20 \n" +
    "ORDER BY NAME";
 

읽기 어렵다.

문자열

+

+

+

\n

"

"

"
 

실제 SQL보다

문자열 문법이 더 많이 보인다.


JSON도 마찬가지

 
String json =
    "{\n" +
    "  \"name\": \"Kim\",\n" +
    "  \"age\": 30\n" +
    "}";
 

HTML은 더 심하다.

 
String html =
    "<html>\n" +
    "<body>\n" +
    "<h1>Hello</h1>\n" +
    "</body>\n" +
    "</html>";
 

그래서 Java는

문자열을 있는 그대로 작성할 수 있는 문법

을 추가했다.


Text Block 등장

 
String sql = """
SELECT *
FROM USER
WHERE AGE >= 20
ORDER BY NAME
""";
 

보는 순간

Java 코드

↓

실제 SQL 그대로
 

읽을 수 있다.


문법

시작

 
"""
 

 
"""
 

사이에 있는 내용이 그대로 문자열이 된다.


JSON 예제

기존

 
String json =
    "{\n" +
    "  \"name\": \"Kim\",\n" +
    "  \"age\": 30\n" +
    "}";
 

Text Block

 
String json = """
{
  "name": "Kim",
  "age": 30
}
""";
 

이스케이프 문자(\")가 거의 필요 없다.

가독성이 훨씬 좋아진다.


HTML 예제

 
String html = """
<html>
    <body>
        <h1>Hello</h1>
    </body>
</html>
""";
 

실제 HTML 파일을 보는 것과 거의 같다.


SQL에서 가장 많이 사용된다.

 
String sql = """
SELECT
    USER_ID,
    USER_NAME,
    EMAIL
FROM USER
WHERE STATUS = 'ACTIVE'
ORDER BY USER_NAME
""";
 

특히

JPA Native Query나

테스트 코드에서 많이 사용한다.


기존 방식과 비교

기존

 
String sql =
    "SELECT USER_ID, USER_NAME " +
    "FROM USER " +
    "WHERE STATUS = 'ACTIVE'";
 

Text Block

 
String sql = """
SELECT USER_ID, USER_NAME
FROM USER
WHERE STATUS = 'ACTIVE'
""";
 

SQL이 훨씬 눈에 잘 들어온다.


줄바꿈도 포함된다.

 
String text = """
Hello
World
""";
 

실제 문자열은

Hello
World
 

이다.


즉,

\n
 

을 직접 쓰지 않아도 된다.


들여쓰기(Indentation)

다음 코드를 보자.

 
String text = """
    Hello
    Java
    World
    """;
 

많은 사람들이

앞의 공백까지 문자열에 포함된다고 생각한다.


실제로는

컴파일러가

공통 들여쓰기(Common Indentation) 를 제거한다.

결과

Hello
Java
World
 

공통 들여쓰기란?

예를 들어

 
String text = """
        A
        B
        C
        """;
 

모든 줄이

공백 8칸으로 시작한다.


컴파일러는

공통 공백 8칸 제거
 

를 수행한다.


결과

A
B
C
 

이다.


일부 줄만 더 들여쓰기 하면?

 
String html = """
<html>
    <body>
        <h1>Hello</h1>
    </body>
</html>
""";
 

공통 공백은 제거하지만

HTML 내부의 구조는 유지된다.

결과

<html>
    <body>
        <h1>Hello</h1>
    </body>
</html>
 

마지막 줄 개행

다음 코드를 보자.

 
String text = """
Hello
World
""";
 

실제로는

Hello
World\n
 

마지막 줄바꿈까지 포함된다.


마지막 개행을 제거하고 싶다면

 
String text = """
Hello
World
""".stripTrailing();
 

또는

 
String text = """
Hello
World""";
 

처럼 마지막 """ 위치를 조절할 수도 있다.


Text Block도 String이다.

 
String text = """
Hello
World
""";
 

그냥 String 객체이다.


따라서

 
text.length();

text.substring(0, 5);

text.contains("Hello");
 

모두 사용할 수 있다.


Text Block 안에서도 변수는 자동 치환되지 않는다.

다음 코드를 보자.

 
String name = "Kim";

String text = """
Hello ${name}
""";
 

결과

Hello ${name}
 

이다.


Java에는

JavaScript의 Template Literal처럼

자동 문자열 치환 기능은 없다.


변수를 넣으려면

기존 방식

 
String text =
        "Hello " + name;
 

또는

 
String text = """
Hello %s
""".formatted(name);
 

(Java 15+)

결과

Hello Kim
 

실무에서 가장 많이 사용하는 예

SQL

 
String sql = """
SELECT *
FROM USER
WHERE USER_ID = ?
""";
 

JSON 테스트 데이터

 
String json = """
{
    "name": "Kim",
    "age": 30
}
""";
 

HTML Template

 
String html = """
<html>
    <body>
        <h1>Mail</h1>
    </body>
</html>
""";
 

언제 사용하면 좋을까?

추천

  • SQL
  • JSON
  • XML
  • HTML
  • 이메일 템플릿
  • 테스트 데이터

굳이 사용할 필요 없는 경우

 
String name = "Kim";
 

한 줄 문자열은 기존 방식이 더 간단하다.


String + Text Block + formatted()

실무에서 많이 사용하는 조합이다.

 
String userId = "kim";

String sql = """
SELECT *
FROM USER
WHERE USER_ID = '%s'
""".formatted(userId);
 

결과

 
SELECT *
FROM USER
WHERE USER_ID = 'kim'
 

면접 포인트

Text Block이란?

Java 15부터 지원되는 여러 줄 문자열(Multi-line String) 문법으로, SQL·JSON·HTML 등의 문자열을 가독성 좋게 표현하기 위해 도입되었다.


장점

  • + 연결 제거
  • \n 제거
  • \" 사용 감소
  • 실제 문서 형태와 거의 동일한 가독성

들여쓰기는 어떻게 처리되는가?

컴파일러가 공통 들여쓰기(Common Indentation)를 자동으로 제거하여 코드의 가독성을 유지하면서 문자열도 자연스럽게 생성한다.


실무에서 가장 많이 사용하는 곳

  • JPA Native Query
  • SQL 작성
  • JSON 테스트 데이터
  • HTML 및 이메일 템플릿

다음 글

다음은 Switch Expression(Java 14 정식) 이다.

여기서는

  • 기존 switch문의 문제점
  • yield가 왜 등장했는지
  • -> 문법의 의미
  • 여러 case를 한 줄에 쓰는 방법
  • Pattern Matching으로 이어지는 흐름

까지 연결해서 설명하겠다.

반응형

'language > java' 카테고리의 다른 글

Pattern Matching for switch(Java 21)  (0) 2026.06.17
Switch Expression(Java 14)  (0) 2026.06.17
var 키워드  (0) 2026.06.17
Reflection + Annotation + Proxy + ThreadLocal  (0) 2026.06.16
ThreadLocal Memory Leak  (0) 2026.06.16

댓글