이번 글은 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 |
댓글