CodeGym /행동 /JAVA 25 SELF /문자 이스케이프

문자 이스케이프

JAVA 25 SELF
레벨 9, 레슨 1
사용 가능

1. 기본 특수 문자와 이스케이프

프로그래밍에서 문자열은 문자뿐 아니라 따옴표, 줄바꿈, 탭 같은 특수 문자도 포함합니다. 때로는 \n이나 \t 같은 기호가 필요하기도 하죠. 그런데 문자열 안에 안녕, "user"!처럼 쓰고 싶다면, 컴파일러가 곧바로 묻습니다: “문자열 안의 따옴표는 오류인가요?”. 바로 이럴 때 이스케이프 메커니즘이 필요합니다.

Java에서 이스케이프는 문자열 안의 특정 문자에 “특별한 의미”를 부여하는 방법입니다. 이를 위해 역슬래시 \(“backslash”)를 사용합니다.

기본 이스케이프 시퀀스:

시퀀스 설명 데모
\n
줄 바꿈 Enter 입력
\t
\\
문자 그대로의 “백슬래시”
\
\"
문자열 내부의 큰따옴표
"
\'
작은따옴표(문자열에서는 드물게 필요)
'
\r
캐리지 리턴(예전 줄바꿈 방식, 거의 사용되지 않음)
\0
널 문자 (보이지 않음)
\b
백스페이스(이전 문자를 삭제 — 콘솔에서 항상 동작하는 것은 아님)

어떻게 동작하는가

작동을 직접 확인하기 위해 이스케이프 문자를 넣은 문자열 몇 개를 출력해 봅시다.

System.out.println("안녕, \"사용자\"!");
// 출력: 안녕, "사용자"!

System.out.println("C:\\Program Files\\MyApp");
// 출력: C:\Program Files\MyApp

System.out.println("줄 1\n줄 2");
// 출력:
// 줄 1
// 줄 2

System.out.println("나는\t탭을\t좋아해요!");
// 출력:
// 나는         탭을    좋아해요!

이처럼 간단한 한 줄(\)만으로도 거의 모든 특수 문자를 문자열에 “안전하게” 포함시킬 수 있어, 컴파일러나 팀 동료를 당황하게 만들지 않습니다.

2. 여러 줄 문자열과 줄바꿈

여러 줄 메시지나 ASCII 아트를 작성해야 할 때가 자주 있습니다. 가장 직관적인 방법은 일반 문자열에서 \n을 사용하는 것입니다.

System.out.println("첫 번째 줄\n두 번째 줄\n세 번째 줄");

하지만 이것이 늘 편리한 것은 아니어서, Java에는 텍스트 블록(Text Blocks)이 도입되었습니다. 텍스트 블록은 삼중 따옴표 """로 시작하며, 이스케이프 없이 여러 줄 텍스트를 그대로 작성하고 서식을 유지할 수 있어 JSON, SQL, HTML에 특히 유용합니다.


// 여러 줄 리터럴(Text Block)
String json = """
    {
        "name": "Alice",
        "age": 30,
        "skills": ["Java", "SQL", "Cloud"]
    }
    """;

System.out.println(json);
Java의 텍스트 블록 """

텍스트 블록을 사용하면 따옴표를 중복하지 않고도 따옴표가 포함된 여러 줄 텍스트를 손쉽게 만들 수 있습니다.

3. Unicode — Java에서 전 세계의 모든 문자를 저장하는 방법

오늘날 우리는 라틴 문자뿐 아니라 키릴 문자, 한자, 수학 기호, 심지어 이모지까지 다룹니다. 이는 모두 문자 인코딩 시스템인 Unicode 덕분에 가능합니다.

Unicode란?

Unicode는 각 문자에 고유 번호(code point)를 부여하는 국제 표준으로, 언어와 플랫폼에 상관없이 동일하게 동작합니다. 덕분에 Java에서 키릴 문자, 영어, 중국 한자, 드문 특수 기호 등을 동시에 쉽게 사용할 수 있습니다.

여러 언어가 섞인 문자열 예:

System.out.println("Hello, 세계! 你好! مرحبا!");

문자열의 Unicode 문자

사용 중인 인코딩이 지원하는 문자라면 직접 입력할 수도 있고, \uXXXX 형태의 이스케이프 시퀀스를 사용할 수도 있습니다. 여기서 XXXX는 4자리 16진수 코드입니다.

System.out.println("문자: \u263A"); // 출력: 😊

코드 포인트가 65535보다 큰 문자(예: 많은 이모지)는 서로게이트 쌍(UTF-16)을 사용합니다:

// 문자 😊(코드 1F60A)는 두 개의 char로 표현됩니다.
System.out.println("스마일: \uD83D\uDE0A"); // 출력: 😊

무엇이 좋은가요?

  • 어떤 텍스트든 저장하고 처리할 수 있습니다.
  • 언어를 섞거나 특수한 문자를 사용해도 걱정할 필요가 없습니다 — Java는 기본적으로 Unicode를 지원합니다.
  • 국제 사용자 및 다양한 문자 체계를 다룰 때 특히 중요합니다.

4. 이모지와 특수 문자

현대의 문자열은 단순한 문자 집합이 아니라 이모지까지 포함합니다! 예를 들어 사용자에게 “웃는 얼굴”이 담긴 즐거운 메시지를 보내고 싶다고 해봅시다.

문자열에 이모지를 넣는 방법?

이모지를 문자열에 직접 입력하세요:

System.out.println("안녕! 😊");

Unicode 코드 사용: 대부분의 이모지는 서로게이트 시퀀스로 나타낼 수 있습니다.

System.out.println("고양이: \uD83D\uDC31"); // 🐱

이모지는 UTF-16 특성상 문자열에서 두 글자를 차지할 수 있습니다. 따라서 길이를 구하는 등의 연산에서 의외의 결과가 나올 수 있습니다:

String s = "😊";
System.out.println(s.length()); // 2가 출력됩니다. 1이 아닙니다!

이는 하나의 Unicode code point가 Java에서 두 개의 char로 인코딩되기 때문입니다. 문자 단위로 올바르게 처리하려면 단순한 length() 대신 code point 관련 메서드를 사용하세요.

5. 함정과 자주 하는 실수

오류 №1: 문자열 안에서 따옴표를 잘못 사용. 내부 따옴표를 이스케이프하지 않으면 컴파일러는 문자열이 끝났다고 “생각”합니다.

System.out.println("그가 말했다: "안녕!""); // 오류!

올바른 방법:

System.out.println("그가 말했다: \"안녕!\"");

오류 №2: 경로에서 하나의 역슬래시만 사용. Java에서 \는 특수 문자(\n, \t, \f 등)를 위한 이스케이프에 사용됩니다. 따라서 문자열 "C:\Temp\file.txt"는 올바르게 해석되지 않습니다.

System.out.println("C:\Temp\file.txt"); // 오류 또는 예상치 못한 결과

올바른 방법:

System.out.println("C:\\Temp\\file.txt"); // 백슬래시 두 개

오류 №3: 텍스트 블록을 무시. Java 15부터는 텍스트 블록을 사용하세요 — 여러 줄 문자열 작업이 쉬워집니다.

String path = """
    C:\Temp\file.txt
    """;
System.out.println(path);

가장 중요한 규칙: 항상 특수 문자와 따옴표를 이스케이프하세요. 이는 숨은 버그를 예방하고 디버깅 시간을 크게 절약합니다.

1
과제
JAVA 25 SELF, 레벨 9, 레슨 1
잠금
백슬래시가 포함된 파일 경로
백슬래시가 포함된 파일 경로
1
과제
JAVA 25 SELF, 레벨 9, 레슨 1
잠금
특수 문자로 여러 줄 출력
특수 문자로 여러 줄 출력
1
과제
JAVA 25 SELF, 레벨 9, 레슨 1
잠금
문자열의 탭과 따옴표
문자열의 탭과 따옴표
1
과제
JAVA 25 SELF, 레벨 9, 레슨 1
잠금
문자열의 유니코드 문자와 이모지
문자열의 유니코드 문자와 이모지
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION