
자바 개발자들에게 '여러 줄의 문자열(Multi-line String)'을 다루는 일은 오랫동안 고역이었다. HTML, SQL, JSON 등 구조화된 텍스트를 자바 코드에 넣으려면 이스케이프 문자(\n)와 연결 연산자(+)로 범벅이 된, 소위 '1차원적 문자열'을 만들어야 했기 때문이다. 이는 가독성을 해칠 뿐만 아니라, 수정 시 실수를 유발하는 주원인이었다.
Java 15에서 정식 표준(JEP 378)으로 채택된 텍스트 블록(Text Blocks)은 이 문제를 근본적으로 해결한다. 단순히 입력의 편의성을 넘어, 컴파일러가 '불필요한 공백(Incidental Whitespace)'을 똑똑하게 계산하여 제거해 줌으로써, 개발자가 코드 상에서 보는 들여쓰기 구조를 실제 문자열 데이터에도 그대로 반영할 수 있게 되었다. 이제 자바에서도 '보이는 그대로'의 문자열을 선언할 수 있게 된 것이다.
텍스트 블록은 세 개의 큰따옴표(""")로 시작하고 끝난다. 시작 따옴표 바로 뒤에는 반드시 줄바꿈(New Line)이 와야 한다는 규칙이 있다.
Legacy vs Modern 비교
// [기존 방식] 가독성이 떨어지고 수정이 불편함
String oldJson = "{\n" +
" \"name\": \"Gemini\",\n" +
" \"version\": 3\n" +
"}";
// [텍스트 블록] 따옴표 이스케이프 불필요, 구조가 한눈에 보임
String newJson = """
{
"name": "Gemini",
"version": 3
}
""";
가장 큰 특징은 'Incidental Whitespace(부수적 공백) 제거'다. 닫는 따옴표(""")의 위치를 기준으로, 그보다 왼쪽에 있는 공백은 모두 '코드 포맷팅을 위한 공백'으로 간주하여 컴파일러가 자동으로 삭제한다.
① JSON 샘플 데이터 작성 (Unit Test용)
String mockUserResponse = """
{
"id": 1004,
"name": "Gemini-Web",
"preferences": {
"theme": "dark",
"notifications": true
}
}
""";
② SQLite 쿼리 작성 (DB 관리용)
String createTableQuery = """
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_name TEXT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
""";
③ HTML 코드 작성 (이스케이프 해방)
String htmlTemplate = """
<html>
<body>
<h1 style="color: blue;">Debugging Mode</h1>
<p>Native-WebView Interop Test Success</p>
</body>
</html>
""";
① formatted() - 간결한 동적 문자열
String name = "Gyu";
String greeting = """
Hello, %s!
Welcome to Modern Java World.
""".formatted(name);
② stripIndent() - 불필요한 공백 제거
String raw = " Line 1\\n Line 2";
String stripped = raw.stripIndent();
// 컴파일러가 인식하는 공통 들여쓰기를 자동으로 삭제한다.
③ translateEscapes() - 이스케이프 문자 실제 변환
String rawText = "Data:\\\\tValue\\\\nNextLine";
String result = rawText.translateEscapes();
// 문자열 내에 포함된 이스케이프 시퀀스를 제어 문자로 바꾼다.
자바의 텍스트 블록은 가독성과 유지보수성이라는 두 마리 토끼를 잡는 핵심 문법이다. 특히 안드로이드 개발 시 마주하는 수많은 비정형 데이터를 코드 안에서 가장 깔끔하게 처리할 수 있는 방법이기도 하다.
텍스트 블록과 전용 메서드들을 즉시 적용해 보자.
그동안 복잡하고 가독성 떨어지게 String에 구겨 넣던 것들을,
이제는 놀라울 정도로 간단하고 가독성 좋게 작성할 수 있을 것이다.
'Dev > Java' 카테고리의 다른 글
| Java Modern Syntax: instanceof 패턴 매칭 (0) | 2026.02.07 |
|---|---|
| Java Modern Syntax: Sealed Classes (0) | 2026.01.11 |
| Java Modern Syntax : Optional (0) | 2026.01.10 |
| Java Modern Syntax : Lambda in switch (0) | 2026.01.08 |
| Java Modern Syntax : Record (0) | 2026.01.07 |