C# 6.0에서 문자열 보간(String interpolation)이라는 기능이 새로 추가되었다. 기존에는 주로 복합 형식 지정(Composite Formatting), 즉 String.Format()와 같은 메서드를 사용하여 형식화된 문자열을 출력할 수 있었으나, 문자열 보간을 사용하면 기존의 방법보다 더 읽기 쉽고 편리하게 형식화된 문자열을 만들 수 있다고 한다.
뒤에 전달인자를 주렁주렁 매달아두는 방법 보다는 확실히 아름답다. 복합 형식 지정에선 가끔 전달인자를 빼먹어 FormatException와 부딪히기도 하고, 중간에 형식 문자열을 변경할 때 인덱스를 일일히 수정해야하는 귀찮음이 있기도 했는데 문자열 보간은 상당히 직관적이다.
그럼 이제 문자열 보간이란 녀석은 어떻게 사용하는건지 알아보자. 우선 문자열 리터럴을 보간된 문자열로 식별하기 위해선 앞에 $ 기호를 추가해야 한다고 한다.
이 자습서에서는 문자열 보간을 사용하여 결과 문자열에서 식 결과의 서식을 지정하고 포함하는 방법을 보여줍니다. 예제에서는 사용자가 기본 C# 개념 및 .NET 형식 서식 지정에 익숙하다고 가정합니다. 문자열 보간 또는 .NET 형식 서식 지정을 처음 접하는 경우 대화형 문자열 보간 자습서을 먼저 체크 아웃합니다. .NET에서 형식 서식 지정하는 방법에 대한 자세한 내용은 .NET의 형식 지정 항목을 참조하세요.
참고
이 문서의 C# 예제는 Try.NET 인라인 코드 러너 및 놀이터에서 실행됩니다. 대화형 창에서 예제를 실행하려면 실행 버튼을 선택합니다. 코드를 실행하면 실행을 다시 선택하여 코드를 수정하고 수정된 코드를 실행할 수 있습니다. 수정된 코드는 대화형 창에서 실행되거나, 컴파일이 실패하면 대화형 창에 모든 C# 컴파일러 오류 메시지가 표시됩니다.
소개
문자열 보간 기능은 복합 서식 지정 기능을 기반으로 빌드되고 결과 문자열에 서식이 지정된 식 결과를 포함하는 읽기 쉽고 편리한 구문을 제공합니다.
문자열 리터럴을 보간된 문자열로 식별하려면 $ 기호를 사용하여 추가합니다. 보간된 문자열에서 값을 반환하는 유효한 C# 식을 포함할 수 있습니다. 다음 예제에서는 식이 계산되는 즉시 결과가 문자열로 변환되고 결과 문자열에 포함됩니다.
C#
double a = 3;
double b = 4;
Console.WriteLine($"Area of the right triangle with legs of {a} and {b} is {0.5 * a * b}");
Console.WriteLine($"Length of the hypotenuse of the right triangle with legs of {a} and {b} is {CalculateHypotenuse(a, b)}");
doubleCalculateHypotenuse(double leg1, double leg2) => Math.Sqrt(leg1 * leg1 + leg2 * leg2);
// Expected output:// Area of the right triangle with legs of 3 and 4 is 6// Length of the hypotenuse of the right triangle with legs of 3 and 4 is 5
콜론(":")과 형식 문자열을 사용하여 보간 식에 따라 식 결과의 형식에서 지원하는 형식 문자열을 지정합니다.
C#
{<interpolationExpression>:<formatString>}
다음 예제에서는 날짜 및 시간 또는 숫자 결과를 생성하는 식의 표준 및 사용자 지정 서식 지정 문자열을 지정하는 방법을 보여줍니다.
C#
var date = new DateTime(1731, 11, 25);
Console.WriteLine($"On {date:dddd, MMMM dd, yyyy} Leonhard Euler introduced the letter e to denote {Math.E:F5} in a letter to Christian Goldbach.");
// Expected output:// On Sunday, November 25, 1731 Leonhard Euler introduced the letter e to denote 2.71828 in a letter to Christian Goldbach.
자세한 내용은 복합 서식 지정 항목의 문자열 구성 요소 서식 지정 섹션을 참조하세요. 해당 섹션에서는 .NET 기본 형식에서 지원하는 표준 및 사용자 지정 서식 지정 문자열을 설명하는 항목에 대한 링크를 제공합니다.
필드 너비와 서식이 지정된 보간 식의 맞춤을 제어하는 방법
쉼표(",") 및 상수 식을 포함한 보간 식에 따라 최소 필드 너비 및 서식이 지정된 식 결과의 맞춤을 지정합니다.
C#
{<interpolationExpression>,<alignment>}
맞춤 값이 양수이면 서식이 지정된 식 결과는 오른쪽 맞춤입니다. 값이 음수이면 왼쪽 맞춤입니다.
보간된 문자열에서는 일반 문자열 리터럴을 사용할 수 있는 모든 이스케이프 시퀀스를 지원합니다. 자세한 내용은 문자열 이스케이프 시퀀스를 참조하세요.
이스케이프 시퀀스를 문자 그대로 해석하려면 약어 리터럴 문자열을 사용합니다. 보간된 약어 문자열은 @ 문자가 뒤에 오는 $ 문자로 시작합니다. C# 8.0부터는 $ 및 @ 토큰을 순서에 관계없이 사용할 수 있습니다. $@"..." 및 @$"..."는 모두 유효한 보간된 약어 문자열입니다.
중괄호("{" 또는 "}")를 포함하려면 결과 문자열에서 2개의 중괄호("{{" 또는 "}}")를 사용합니다. 자세한 내용은 복합 서식 지정 항목의 중괄호 이스케이프 처리 섹션을 참조하세요.
다음 예제에서는 결과 문자열에 중괄호를 포함하고 약어 보간된 문자열을 만드는 방법을 보여줍니다.
C#
var xs = newint[] { 1, 2, 7, 9 };
var ys = newint[] { 7, 9, 12 };
Console.WriteLine($"Find the intersection of the {{{string.Join(", ",xs)}}} and {{{string.Join(", ",ys)}}} sets.");
var userName = "Jane";
var stringWithEscapes = $"C:\\Users\\{userName}\\Documents";
var verbatimInterpolated = $@"C:\Users\{userName}\Documents";
Console.WriteLine(stringWithEscapes);
Console.WriteLine(verbatimInterpolated);
// Expected output:// Find the intersection of the {1, 2, 7, 9} and {7, 9, 12} sets.// C:\Users\Jane\Documents// C:\Users\Jane\Documents
보간 식에서 3개로 구성된 ?: 조건부 연산자를 사용하는 방법
보간 식에서 콜론(":")에 특별한 의미가 있으므로 식에서 조건부 연산자를 사용하기 위해 다음 예제에서 볼 수 있듯이 해당 식을 괄호로 묶습니다.
C#
var rand = new Random();
for (int i = 0; i < 7; i++)
{
Console.WriteLine($"Coin flip: {(rand.NextDouble() < 0.5 ? "heads" : "tails")}");
}
string messageInInvariantCulture = FormattableString.Invariant($"Date and time in invariant culture: {DateTime.Now}");
Console.WriteLine(messageInInvariantCulture);
// Expected output is like:// Date and time in invariant culture: 05/17/2018 15:46:24
결론
이 자습서에서는 문자열 보간 사용법의 일반적인 시나리오를 설명합니다. 문자열 보간에 대한 자세한 내용은 문자열 보간 항목을 참조하세요. .NET에서 형식 서식 지정하는 방법에 대한 자세한 내용은 .NET의 형식 지정 및 복합 서식 지정 항목을 참조하세요.