$ - 문자열 보간(C# 참조)$ - string interpolation (C# Reference)

$특수 문자는 문자열 리터럴을 보간된 문자열로 식별합니다.The $ special character identifies a string literal as an interpolated string. 보간된 문자열은 보간 식이 포함될 수 있는 문자열 리터럴입니다.An interpolated string is a string literal that might contain interpolation expressions. 보간된 문자열이 결과 문자열로 해석되면 보간 식이 있는 항목이 식 결과의 문자열 표현으로 바뀝니다.When an interpolated string is resolved to a result string, items with interpolation expressions are replaced by the string representations of the expression results. 이 기능은 컴퓨터 언어 C# 6 이상 버전에서 사용할 수 있습니다.This feature is available in C# 6 and later versions of the language.

문자열 보간은 문자열 합성 서식 지정 기능보다 읽기 쉽고 편리하게 서식이 지정된 문자열을 만들 수 있는 구문을 제공합니다.String interpolation provides a more readable and convenient syntax to create formatted strings than a string composite formatting feature. 다음 예제에서는 두 기능을 사용하여 동일한 출력을 생성합니다.The following example uses both features to produce the same output:

string name = "Mark";
var date = DateTime.Now;

// Composite formatting:
Console.WriteLine("Hello, {0}! Today is {1}, it's {2:HH:mm} now.", name, date.DayOfWeek, date);
// String interpolation:
Console.WriteLine($"Hello, {name}! Today is {date.DayOfWeek}, it's {date:HH:mm} now.");
// Both calls produce the same output that is similar to:
// Hello, Mark! Today is Wednesday, it's 19:40 now.

보간된 문자열의 구조Structure of an interpolated string

문자열 리터럴을 보간된 문자열로 식별하려면 $ 기호를 사용하여 추가합니다.To identify a string literal as an interpolated string, prepend it with the $ symbol. 문자열 리터럴을 시작하는 $" 사이에 공백이 없어야 합니다.You cannot have any white space between the $ and the " that starts a string literal. 이렇게 하면 컴파일 시간 오류가 발생합니다.Doing so causes a compile-time error.

보간 식이 있는 항목의 구조는 다음과 같습니다.The structure of an item with an interpolation expression is as follows:

{<interpolationExpression>[,<alignment>][:<formatString>]}

대괄호 안의 요소는 선택 사항입니다.Elements in square brackets are optional. 다음 표에서는 각 요소에 대해 설명합니다.The following table describes each element:

요소Element 설명Description
interpolationExpression 서식을 지정할 결과를 생성하는 식입니다.The expression that produces a result to be formatted. null 결과의 문자열 표현은 String.Empty입니다.String representation of the null result is String.Empty.
alignment 보간 식의 결과에 대한 문자열 표현의 최소 문자 수를 정의하는 값을 갖는 상수 식입니다.The constant expression whose value defines the minimum number of characters in the string representation of the result of the interpolation expression. 양수이면 문자열 표현이 오른쪽에 맞춰지며, 음수이면 왼쪽에 맞춰집니다.If positive, the string representation is right-aligned; if negative, it's left-aligned. 자세한 내용은 맞춤 구성 요소를 참조하세요.For more information, see Alignment Component.
formatString 식 결과의 형식을 기준으로 지원되는 서식 문자열입니다.A format string that is supported by the type of the expression result. 자세한 내용은 서식 문자열 구성 요소를 참조하세요.For more information, see Format String Component.

다음 예제에서는 위에 설명된 선택적 서식 지정 구성 요소를 사용합니다.The following example uses optional formatting components described above:

Console.WriteLine($"|{"Left",-7}|{"Right",7}|");

const int FieldWidthRightAligned = 20;
Console.WriteLine($"{Math.PI,FieldWidthRightAligned} - default formatting of the pi number");
Console.WriteLine($"{Math.PI,FieldWidthRightAligned:F3} - display only three decimal digits of the pi number");
// Expected output is:
// |Left   |  Right|
//     3.14159265358979 - default formatting of the pi number
//                3.142 - display only three decimal digits of the pi number    

특수 문자Special characters

보간된 문자열로 생성된 문자에 중괄호("{" 또는 "}")를 포함하려면 두 개의 중괄호("{{" 또는 "}}")를 사용합니다.To include a brace, "{" or "}", in the text produced by an interpolated string, use two braces, "{{" or "}}". 자세한 내용은 중괄호 이스케이프를 참조하세요.For more information, see Escaping Braces.

콜론(":")은 보간 식 항목에서 특별한 의미가 있으므로, 보간 식에서 조건부 연산자를 사용하려면 해당 식을 괄호로 묶습니다.As the colon (":") has special meaning in an interpolation expression item, in order to use a conditional operator in an interpolation expression, enclose that expression in parentheses.

다음 예제에서는 중괄호를 결과 문자열에 포함하는 방법과 보간 식에서 조건부 연산자를 사용하는 방법을 보여줍니다.The following example shows how to include a brace in a result string and how to use a conditional operator in an interpolation expression:

string name = "Horace";
int age = 34;
Console.WriteLine($"He asked, \"Is your name {name}?\", but didn't wait for a reply :-{{");
Console.WriteLine($"{name} is {age} year{(age == 1 ? "" : "s")} old.");
// Expected output is:
// He asked, "Is your name Horace?", but didn't wait for a reply :-{
// Horace is 34 years old.

약어 보간된 문자열은 @ 문자가 뒤에 오는 $ 문자로 시작합니다.A verbatim interpolated string starts with the $ character followed by the @ character. 약어 문자열에 대한 자세한 내용은 문자열약어 식별자 항목을 참조하세요.For more information about verbatim strings, see the string and verbatim identifier topics.

참고

$ 토큰은 약어 보간된 문자열에서 @ 토큰 앞에 나타나야 합니다.The $ token must appear before the @ token in a verbatim interpolated string.

암시적 변환 및 IFormatProvider 구현 지정Implicit conversions and specifying IFormatProvider implementation

보간된 문자열에서 다음과 같은 세 가지 암시적 변환을 수행할 수 있습니다.There are three implicit conversions from an interpolated string:

  1. 보간된 문자열을 String 인스턴스로 변환. 보간 식 항목을 사용하여 보간된 문자열을 확인한 결과를 올바르게 서식이 지정된 문자열 표현으로 바꾼 것입니다.Conversion of an interpolated string to a String instance that is the result of interpolated string resolution with interpolation expression items being replaced with the properly formatted string representations of their results. 이 변환은 현재 문화권을 사용합니다.This conversion uses the current culture.

  2. 보간된 문자열을 서식을 지정할 식 결과와 함께 복합 서식 문자열을 나타내는 FormattableString 인스턴스로 변환.Conversion of an interpolated string to a FormattableString instance that represents a composite format string along with the expression results to be formatted. 이 변수를 사용하면 단일 FormattableString 인스턴스에서 문화권별 콘텐츠가 포함된 여러 결과 문자열을 만들 수 있습니다.That allows you to create multiple result strings with culture-specific content from a single FormattableString instance. 이렇게 하려면 다음 메서드 중 하나를 호출합니다.To do that call one of the following methods:

    ToString(IFormatProvider) 메서드를 사용하여 사용자 지정 형식을 지원하는 IFormatProvider 인터페이스의 사용자 정의 구현을 제공할 수도 있습니다.You also can use the ToString(IFormatProvider) method to provide a user-defined implementation of the IFormatProvider interface that supports custom formatting. 자세한 내용은 ICustomFormatter를 사용한 사용자 지정 형식 지정을 참조하세요.For more information, see Custom Formatting with ICustomFormatter.

  3. 보간된 문자열을 IFormattable 인스턴스로 변환. 또한 이 인스턴스를 사용하면 단일 IFormattable 인스턴스의 문화권별 콘텐츠로 여러 결과 문자열을 만들 수 있습니다.Conversion of an interpolated string to an IFormattable instance that also allows you to create multiple result strings with culture-specific content from a single IFormattable instance.

다음 예제에서는 FormattableString에 대한 암시적 변환을 사용하여 문화권별 결과 문자열을 만듭니다.The following example uses implicit conversion to FormattableString to create culture-specific result strings:

double speedOfLight = 299792.458;
FormattableString message = $"The speed of light is {speedOfLight:N3} km/s.";

System.Globalization.CultureInfo.CurrentCulture = System.Globalization.CultureInfo.GetCultureInfo("nl-NL");
string messageInCurrentCulture = message.ToString();

var specificCulture = System.Globalization.CultureInfo.GetCultureInfo("en-IN");
string messageInSpecificCulture = message.ToString(specificCulture);

string messageInInvariantCulture = FormattableString.Invariant(message);

Console.WriteLine($"{System.Globalization.CultureInfo.CurrentCulture,-10} {messageInCurrentCulture}");
Console.WriteLine($"{specificCulture,-10} {messageInSpecificCulture}");
Console.WriteLine($"{"Invariant",-10} {messageInInvariantCulture}");
// Expected output is:
// nl-NL      The speed of light is 299.792,458 km/s.
// en-IN      The speed of light is 2,99,792.458 km/s.
// Invariant  The speed of light is 299,792.458 km/s.

추가 자료Additional resources

문자열 보간을 처음 접하는 경우 C#의 문자열 보간 대화형 자습서를 참조하세요.If you are new to string interpolation, see the String interpolation in C# interactive tutorial. 보간된 문자열을 사용하여 서식화된 문자열을 생성하는 방법을 보여 주는 다른 C#의 문자열 보간 자습서도 확인할 수 있습니다.You also can check another String interpolation in C# tutorial that demonstrates how to use interpolated strings to produce formatted strings.

보간된 문자열의 컴파일Compilation of interpolated strings

보간된 문자열이 string 형식이면 일반적으로 String.Format 메서드 호출로 변환됩니다.If an interpolated string has the type string, it's typically transformed into a String.Format method call. 컴파일러는 분석된 동작이 연결에 해당하는 경우 String.FormatString.Concat으로 바꿀 수 있습니다.The compiler may replace String.Format with String.Concat if the analyzed behavior would be equivalent to concatenation.

보간된 문자열 형식이 IFormattable 또는 FormattableString이면 컴파일러가 FormattableStringFactory.Create 메서드에 대한 호출을 생성합니다.If an interpolated string has the type IFormattable or FormattableString, the compiler generates a call to the FormattableStringFactory.Create method.

C# 언어 사양C# language specification

자세한 내용은 C# 언어 사양보간된 문자열 섹션을 참조하세요.For more information, see the Interpolated strings section of the C# language specification.

참고 항목See also