숏컷 코드
string name = "Mina";
int score = 1200;
decimal rate = 0.856m;
string msg = $"{name}님의 점수: {score:N0}점"; // "Mina님의 점수: 1,200점"
string pct = $"달성률: {rate:P1}"; // "달성률: 85.6%"
string date = $"기준일: {DateTime.Now:yyyy-MM-dd}";문법
어떤 문자열 리터럴을 먼저 고르면 되나
| 상황 | 먼저 떠올릴 것 |
|---|---|
| 일반 문자열에 값 끼워 넣기 | $"" |
경로나 정규식처럼 \\가 많음 | @"" |
| 경로 안에 값도 들어감 | $@"" |
| JSON/SQL/HTML 여러 줄 블록 | """...""" |
$"" — 보간 문자열
$"" 안의 {expression}은 컴파일러가 string.Format() 호출로 변환합니다. 표현식이므로 메서드 호출, 삼항 연산자, null 조건 연산자도 중괄호 안에 넣을 수 있습니다.
string label = $"상태: {(isActive ? "활성" : "비활성")}";
string nick = $"{user?.Nickname ?? "Guest"}";@"" — 축자(verbatim) 리터럴
백슬래시를 이스케이프 없이 그대로 씁니다. 파일 경로, 정규식처럼 \가 자주 등장하는 문자열에 유용합니다.
string path = @"C:\Users\Mina\Documents\report.txt";
string regex = @"\d{3}-\d{4}";
// @와 $를 결합하면 경로에서도 보간 사용 가능
string log = $@"C:\Logs\{DateTime.Now:yyyyMMdd}.log";// ❌ 일반 문자열에서 역슬래시 이스케이프 누락
string path = "C:\temp\logs"; // \t 때문에 의도와 다름
// ✅ 축자 리터럴 사용
string path = @"C:\temp\logs";""" — 원시 문자열 리터럴 (C# 11+)
큰따옴표 세 개로 감싸면 줄바꿈, 들여쓰기, 따옴표를 이스케이프 없이 쓸 수 있습니다. JSON, SQL, HTML처럼 복잡한 텍스트를 코드에 넣을 때 특히 유용합니다.
string json = """
{
"name": "Mina",
"score": 1200
}
""";닫는 """의 들여쓰기 위치가 내용의 기준 들여쓰기를 결정합니다. $"""..."""로 보간도 함께 사용할 수 있습니다.
서식 지정자
{value:format} 형태로 서식을 지정합니다.
decimal price = 12345.6m;
double ratio = 0.1234;
int count = 1234567;
$"{price:C}" // ₩12,346 (현재 문화권 통화)
$"{price:C2}" // ₩12,345.60
$"{ratio:P1}" // 12.3%
$"{count:N0}" // 1,234,567
$"{count:D8}" // 00001234 (고정 자릿수)
$"{now:yyyy-MM-dd HH:mm}" // 2026-03-25 09:30체크포인트
| 리터럴 | 특징 | 잘 맞는 상황 |
|---|---|---|
$"" | 보간, 이스케이프 필요 | 일반 문자열 조합 |
@"" | 이스케이프 없음 | 경로, 정규식 |
$@"" | 보간 + 이스케이프 없음 | 경로에 변수 포함 |
"""...""" | 여러 줄, 따옴표 자유 | JSON, SQL, HTML 블록 |
$"""...""" | 보간 + 여러 줄 | 동적 JSON/HTML 생성 |
주의할 점
중괄호 안에 복잡한 로직을 넣으면 문자열이 읽기 어려워집니다. 조건 분기가 길어지면 변수에 미리 값을 계산해 두고, 보간에는 그 변수만 넣는 편이 깔끔합니다.
루프 안에서 $""를 반복 사용하면 매번 새 문자열이 만들어집니다. 많은 항목을 이어 붙여야 한다면 StringBuilder와 Append/AppendFormat이 더 효율적입니다.
참고 링크
3 sources