CodeGym /행동 /C# SELF /이스케이프, 특수문자 그리고 문자열 보간

이스케이프, 특수문자 그리고 문자열 보간

C# SELF
레벨 9 , 레슨 1
사용 가능

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

프로그래밍에서 문자열은 그냥 글자만 있는 게 아니라, 따옴표, 줄바꿈, 탭 같은 특수문자도 들어가. 가끔은 \n이나 \t 같은 기호도 써야 하고. 근데 만약 문자열 안에 안녕, "user"! 이렇게 쓰고 싶으면, 컴파일러가 바로 물어볼 거야: "문자열 안의 따옴표, 이거 오류 아냐?" 이럴 때 이스케이프가 필요해.

C#에서 이스케이프란 문자열 안의 어떤 문자에 "특별한 의미"를 주는 방법이야. 이때 백슬래시 \ (backslash)를 써.

클래식 특수문자

시퀀스 설명 데모
\n 줄바꿈 엔터 누름
\t
\\ 그냥 "백슬래시" 문자 \
\" 문자열 안의 따옴표 "
\' 작은따옴표 (문자열에선 거의 안 씀) '
\r 캐리지 리턴 (옛날 줄바꿈, 거의 안 씀)
\0 Null 문자 (안 보임)
\b 백스페이스 (이전 문자 지움 — 콘솔에서 항상 되는 건 아님)

어떻게 동작하냐면

이스케이프 문자 써서 문자열을 몇 개 써보면 바로 느낌 올 거야.


Console.WriteLine("안녕, \"사용자\"!");
// 출력: 안녕, "사용자"!

Console.WriteLine("C:\\Program Files\\MyApp");
// 출력: C:\Program Files\MyApp

Console.WriteLine("문자열 1\n문자열 2");
// 출력:
// 문자열 1
// 문자열 2

Console.WriteLine("나\t탭을\t좋아해!");
// 출력:
// 나      탭을   좋아해!

이렇게, 백슬래시(\) 하나만 있으면, 거의 모든 특수문자를 문자열에 "밀어넣을" 수 있어. 컴파일러나 팀원도 당황 안 하고!

2. 일반 문자열과 리터럴 문자열 (@-문자열)

근데 만약 파일 경로처럼 백슬래시를 여러 번 써야 한다면? 매번 \\ 이렇게 쓰는 거, 진짜 귀찮지. 다행히 C#엔 리터럴 문자열(verbatim string)이 있어서, @로 시작하면 돼.

어떻게 생겼냐면?


string path = "C:\\Users\\Ann\\Documents\\";
string verbatimPath = @"C:\Users\Ann\Documents\";

리터럴 문자열에선 이스케이프 필요 없어 — 백슬래시가 그냥 문자야. 근데 한 가지 주의: 따옴표를 쓰고 싶으면 두 번 써야 해!


string quote = @"이건 따옴표가 들어간 리터럴 문자열: ""Hello""!";
Console.WriteLine(quote);
// 출력: 이건 따옴표가 들어간 리터럴 문자열: "Hello"!

비주얼 비교

스타일 문법 동작 방식
일반 "C:\\Folder\\File.txt" 백슬래시(\)마다 두 번 써야 함
리터럴 (@) @"C:\Folder\File.txt" 백슬래시(\) 그냥 써도 됨
리터럴 + 따옴표 @"Text에 ""따옴표"" 있음" 따옴표는 두 번 써야 함

꿀팁: 파일 경로나 여러 줄 텍스트, 정규식 패턴 쓸 땐 리터럴 문자열이 최고야.

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

여러 줄 메시지나 ASCII 아트 같은 거 쓸 때 많지? 제일 직관적인 방법은 일반 문자열에서 \n 쓰거나, 리터럴 문자열 쓰는 거야. 리터럴 문자열은 줄바꿈도, 탭도, 있는 그대로 다 살려줘. 예시:


Console.WriteLine("첫 번째 줄\n두 번째 줄");

Console.WriteLine(@"여러 줄 문자열.
줄바꿈 이스케이프 필요 없음
탭도    그대로 들어감.");

그리고 C#에 최근에 raw string literal (따옴표 세 개)도 생겼어. 이건 따옴표 중복 없이 여러 줄 텍스트 쓸 수 있어. 예시:


string json = """
    {
        "name": "Alice",
        "age": 30,
        "skills": ["C#", "SQL", "Azure"]
    }
    """;

Console.WriteLine(json);

4. Unicode — C#에서 전 세계 문자 다루기

요즘은 라틴 알파벳만 쓰는 게 아니라, 한글, 한자, 수학 기호, 이모지까지 다 써야 하잖아. 이게 가능한 건 Unicode 문자 인코딩 덕분이야.

Unicode가 뭐냐면?

Unicode는 국제 표준이야. 모든 문자에 고유한 번호(code point)를 부여해서, 언어나 플랫폼 상관없이 쓸 수 있게 해줘. 그래서 C#에서도 한글, 영어, 중국어, 특수문자까지 다 한 번에 쓸 수 있어.

여러 언어로 된 문자열 예시:


Console.WriteLine("Hello, 세계! 你好! مرحبا!");

문자열에서 Unicode 문자 쓰기

네가 쓰는 인코딩에서 지원하는 문자는 그냥 바로 써도 되고, 이스케이프 시퀀스 \uXXXX (여기서 XXXX는 4자리 16진수 코드)로도 쓸 수 있어.


Console.WriteLine("문자: \u263A"); // ☺ 출력됨

65535보다 큰 코드(이모지 등)는 \UXXXXXXXX (8자리)로 써야 해:


Console.WriteLine("이모지: \U0001F60A"); // 😊 출력됨

이게 왜 좋냐면?

  • 아무 텍스트나 저장하고 처리할 수 있어.
  • 언어 섞어서 쓰거나 특이한 문자 써도 걱정 ㄴㄴ — C#이랑 .NET은 Unicode 바로 지원해.
  • 특히 해외 유저나 특수 알파벳 쓸 때 필수!

5. 이모지와 특수문자 문자열에 넣기

요즘 문자열은 그냥 글자만 있는 게 아니라 이모지도 들어가야지! 예를 들어, 유저한테 귀여운 "웃는 얼굴" 보내고 싶을 때.

이모지 문자열에 넣는 법?

그냥 이모지 복붙해서 써:
필요한 이모지(예: 😊, 🚀, 🐱)를 복사해서 문자열에 붙여넣으면 돼:


Console.WriteLine("안녕! 😊");

Unicode 코드 쓰기:
대부분 이모지는 \U랑 8자리 코드로 쓸 수 있어.


Console.WriteLine("여기 고양이: \U0001F431"); // 🐱

이모지 코드는 온라인 Unicode 표에서 찾을 수 있어.

이모지 쓸 때 주의할 점

이모지는 문자열에서 2글자 이상 차지할 수도 있어 (Unicode 코드가 16비트보다 크니까).

예를 들어 문자열 길이 구할 때 "어라?" 할 수도 있음:


string s = "😊";
Console.WriteLine(s.Length); // 2가 나올 수도 있어!

이건 이 이모지의 codepoint가 문자 2개로 인코딩되기 때문이야.

콘솔이나 웹에 출력할 땐, 시스템/폰트가 지원하면 이모지 잘 나와.

이모지 들어간 문자열 출력 예시


Console.WriteLine("성공 축하해! 🎉 멋지다! 🚀");

6. 헷갈리기 쉬운 부분과 자주 하는 실수

처음엔 따옴표나 백슬래시 이스케이프에서 많이 헷갈려. 이스케이프 안 하면, 컴파일러가 문자열이 끝났다고 착각할 수도 있어.

실수 예시:


Console.WriteLine("그가 말했다: "안녕!""); // 오류! 컴파일러 멘붕.

정답:


Console.WriteLine("그가 말했다: \"안녕!\"");

또, 파일 경로 출력할 때 이렇게 쓰면:


Console.WriteLine("C:\Temp\file.txt"); // 오류나거나, 예를 들어: C:  emp ile.txt 이렇게 나옴

왜냐면 \t\f가 특수문자(탭, 폼피드)이기 때문이야. 이럴 땐 두 가지 방법이 있어:


Console.WriteLine("C:\\Temp\\file.txt");    // 백슬래시 두 번
Console.WriteLine(@"C:\Temp\file.txt");     // 리터럴 문자열

중요: 리터럴 문자열에서도 따옴표 쓰려면 두 번 써야 해:


Console.WriteLine(@"파일 ""config.txt""을(를) 찾을 수 없습니다."); // 파일 "config.txt"을(를) 찾을 수 없습니다.
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION