C#의 문자열 보간String interpolation in C#

이 자습서에서는 문자열 보간을 사용하여 결과 문자열에서 식 결과의 서식을 지정하고 포함하는 방법을 보여줍니다.This tutorial shows you how to use string interpolation to format and include expression results in a result string. 예제에서는 사용자가 기본 C# 개념 및 .NET 형식 서식 지정에 익숙하다고 가정합니다.The examples assume that you are familiar with basic C# concepts and .NET type formatting. 문자열 보간 또는 .NET 형식 서식 지정을 처음 접하는 경우 대화형 문자열 보간 자습서을 먼저 체크 아웃합니다.If you are new to string interpolation or .NET type formatting, check out the interactive string interpolation tutorial first. .NET에서 형식 서식 지정하는 방법에 대한 자세한 내용은 .NET의 형식 지정 항목을 참조하세요.For more information about formatting types in .NET, see the Formatting Types in .NET topic.

참고

이 문서의 C# 예제는 Try.NET 인라인 코드 러너 및 놀이터에서 실행됩니다.The C# examples in this article run in the Try.NET inline code runner and playground. 대화형 창에서 예제를 실행하려면 실행 버튼을 선택합니다.Select the Run button to run an example in an interactive window. 코드를 실행하면 실행을 다시 선택하여 코드를 수정하고 수정된 코드를 실행할 수 있습니다.Once you execute the code, you can modify it and run the modified code by selecting Run again. 수정된 코드는 대화형 창에서 실행되거나, 컴파일이 실패하면 대화형 창에 모든 C# 컴파일러 오류 메시지가 표시됩니다.The modified code either runs in the interactive window or, if compilation fails, the interactive window displays all C# compiler error messages.

소개Introduction

문자열 보간 기능은 복합 서식 지정 기능을 기반으로 빌드되고 결과 문자열에 서식이 지정된 식 결과를 포함하는 읽기 쉽고 편리한 구문을 제공합니다.The string interpolation feature is built on top of the composite formatting feature and provides a more readable and convenient syntax to include formatted expression results in a result string.

문자열 리터럴을 보간된 문자열로 식별하려면 $ 기호를 사용하여 추가합니다.To identify a string literal as an interpolated string, prepend it with the $ symbol. 보간된 문자열에서 값을 반환하는 유효한 C# 식을 포함할 수 있습니다.You can embed any valid C# expression that returns a value in an interpolated string. 다음 예제에서는 식이 계산되는 즉시 결과가 문자열로 변환되고 결과 문자열에 포함됩니다.In the following example, as soon as an expression is evaluated, its result is converted into a string and included in a result string:

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)}");

double CalculateHypotenuse(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

이 예제에서 볼 수 있듯이 중괄호를 포함하여 보간된 문자열에 식을 포함합니다.As the example shows, you include an expression in an interpolated string by enclosing it with braces:

{<interpolationExpression>}

보간된 문자열은 문자열 복합 서식 지정 기능의 모든 기능을 지원합니다.Interpolated strings support all the capabilities of the string composite formatting feature. 따라서 String.Format 메서드를 사용할 때 보다 읽기 쉬운 대안이 됩니다.That makes them a more readable alternative to the use of the String.Format method.

보간 식에 대한 서식 문자열을 지정하는 방법How to specify a format string for an interpolation expression

콜론(":")과 형식 문자열을 사용하여 보간 식에 따라 식 결과의 형식에서 지원하는 형식 문자열을 지정합니다.You specify a format string that is supported by the type of the expression result by following the interpolation expression with a colon (":") and the format string:

{<interpolationExpression>:<formatString>}

다음 예제에서는 날짜 및 시간 또는 숫자 결과를 생성하는 식의 표준 및 사용자 지정 서식 지정 문자열을 지정하는 방법을 보여줍니다.The following example shows how to specify standard and custom format strings for expressions that produce date and time or numeric results:

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.

자세한 내용은 복합 서식 지정 항목의 문자열 구성 요소 서식 지정 섹션을 참조하세요.For more information, see the Format String Component section of the Composite Formatting topic. 해당 섹션에서는 .NET 기본 형식에서 지원하는 표준 및 사용자 지정 서식 지정 문자열을 설명하는 항목에 대한 링크를 제공합니다.That section provides links to the topics that describe standard and custom format strings supported by .NET base types.

필드 너비와 서식이 지정된 보간 식의 맞춤을 제어하는 방법How to control the field width and alignment of the formatted interpolation expression

쉼표(",") 및 상수 식을 포함한 보간 식에 따라 최소 필드 너비 및 서식이 지정된 식 결과의 맞춤을 지정합니다.You specify the minimum field width and the alignment of the formatted expression result by following the interpolation expression with a comma (",") and the constant expression:

{<interpolationExpression>,<alignment>}

맞춤 값이 양수이면 서식이 지정된 식 결과는 오른쪽 맞춤입니다. 값이 음수이면 왼쪽 맞춤입니다.If the alignment value is positive, the formatted expression result is right-aligned; if negative, it's left-aligned.

맞춤 및 서식 문자열을 모두 지정해야 할 경우 맞춤 구성 요소를 시작합니다.If you need to specify both alignment and a format string, start with the alignment component:

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

다음 예제에서는 맞춤을 지정하고 파이프 문자("|")를 사용하여 텍스트 필드를 구분하는 방법을 보여줍니다.The following example shows how to specify alignment and uses pipe characters ("|") to delimit text fields:

const int NameAlignment = -9;
const int ValueAlignment = 7;

double a = 3;
double b = 4;
Console.WriteLine($"Three classical Pythagorean means of {a} and {b}:");
Console.WriteLine($"|{"Arithmetic",NameAlignment}|{0.5 * (a + b),ValueAlignment:F3}|");
Console.WriteLine($"|{"Geometric",NameAlignment}|{Math.Sqrt(a * b),ValueAlignment:F3}|");
Console.WriteLine($"|{"Harmonic",NameAlignment}|{2 / (1 / a + 1 / b),ValueAlignment:F3}|");

// Expected output:
// Three classical Pythagorean means of 3 and 4:
// |Arithmetic|  3.500|
// |Geometric|  3.464|
// |Harmonic |  3.429|

출력 표시 예제에서 볼 수 있듯이 서식이 지정된 식 결과의 길이가 지정된 필드 너비를 초과하는 경우 맞춤 값은 무시됩니다.As the example output shows, if the length of the formatted expression result exceeds specified field width, the alignment value is ignored.

자세한 내용은 복합 서식 지정 항목의 맞춤 구성 요소 섹션을 참조하세요.For more information, see the Alignment Component section of the Composite Formatting topic.

보간된 문자열에서 이스케이프 시퀀스를 사용하는 방법How to use escape sequences in an interpolated string

보간된 문자열에서는 일반 문자열 리터럴을 사용할 수 있는 모든 이스케이프 시퀀스를 지원합니다.Interpolated strings support all escape sequences that can be used in ordinary string literals. 자세한 내용은 문자열 이스케이프 시퀀스를 참조하세요.For more information, see String escape sequences.

이스케이프 시퀀스를 문자 그대로 해석하려면 약어 리터럴 문자열을 사용합니다.To interpret escape sequences literally, use a verbatim string literal. 보간된 약어 문자열은 @ 문자가 뒤에 오는 $ 문자로 시작합니다.An interpolated verbatim string starts with the $ character followed by the @ character. C# 8.0부터는 $@ 토큰을 순서에 관계없이 사용할 수 있습니다. $@"..."@$"..."는 모두 유효한 보간된 약어 문자열입니다.Starting with C# 8.0, you can use the $ and @ tokens in any order: both $@"..." and @$"..." are valid interpolated verbatim strings.

중괄호("{" 또는 "}")를 포함하려면 결과 문자열에서 2개의 중괄호("{{" 또는 "}}")를 사용합니다.To include a brace, "{" or "}", in a result string, use two braces, "{{" or "}}". 자세한 내용은 복합 서식 지정 항목의 중괄호 이스케이프 처리 섹션을 참조하세요.For more information, see the Escaping Braces section of the Composite Formatting topic.

다음 예제에서는 결과 문자열에 중괄호를 포함하고 약어 보간된 문자열을 만드는 방법을 보여줍니다.The following example shows how to include braces in a result string and construct a verbatim interpolated string:

var xs = new int[] { 1, 2, 7, 9 };
var ys = new int[] { 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개로 구성된 ?: 조건부 연산자를 사용하는 방법How to use a ternary conditional operator ?: in an interpolation expression

보간 식에서 콜론(":")에 특별한 의미가 있으므로 식에서 조건부 연산자를 사용하기 위해 다음 예제에서 볼 수 있듯이 해당 식을 괄호로 묶습니다.As the colon (":") has special meaning in an item with an interpolation expression, in order to use a conditional operator in an expression, enclose it in parentheses, as the following example shows:

var rand = new Random();
for (int i = 0; i < 7; i++)
{
    Console.WriteLine($"Coin flip: {(rand.NextDouble() < 0.5 ? "heads" : "tails")}");
}

문자열 보간을 사용하여 문화권별 결과 문자열을 만드는 방법How to create a culture-specific result string with string interpolation

기본적으로는 보간된 문자열은 모든 서식 지정 작업에 대해 CultureInfo.CurrentCulture 속성에서 정의한 현재 문화권을 사용합니다.By default, an interpolated string uses the current culture defined by the CultureInfo.CurrentCulture property for all formatting operations. System.FormattableString 인스턴스에 대한 보간된 문자열의 암시적 변환을 사용하고 해당 ToString(IFormatProvider) 메서드를 호출하여 문화권별 결과 문자열을 만듭니다.Use implicit conversion of an interpolated string to a System.FormattableString instance and call its ToString(IFormatProvider) method to create a culture-specific result string. 다음 예제에서는 해당 작업을 수행하는 방법을 보여줍니다.The following example shows how to do that:

var cultures = new System.Globalization.CultureInfo[]
{
    System.Globalization.CultureInfo.GetCultureInfo("en-US"),
    System.Globalization.CultureInfo.GetCultureInfo("en-GB"),
    System.Globalization.CultureInfo.GetCultureInfo("nl-NL"),
    System.Globalization.CultureInfo.InvariantCulture
};

var date = DateTime.Now;
var number = 31_415_926.536;
FormattableString message = $"{date,20}{number,20:N3}";
foreach (var culture in cultures)
{
    var cultureSpecificMessage = message.ToString(culture);
    Console.WriteLine($"{culture.Name,-10}{cultureSpecificMessage}");
}

// Expected output is like:
// en-US       5/17/18 3:44:55 PM      31,415,926.536
// en-GB      17/05/2018 15:44:55      31,415,926.536
// nl-NL        17-05-18 15:44:55      31.415.926,536
//            05/17/2018 15:44:55      31,415,926.536

이 예제에서 볼 수 있듯이 하나의 FormattableString 인스턴스를 사용하여 다양한 문화권에 여러 결과 문자열을 생성할 수 있습니다.As the example shows, you can use one FormattableString instance to generate multiple result strings for various cultures.

고정 문화권을 사용하여 결과 문자열을 만드는 방법How to create a result string using the invariant culture

FormattableString.ToString(IFormatProvider) 메서드와 함께 고정 FormattableString.Invariant 메서드를 사용하여 InvariantCulture에서 보간된 문자열을 결과 문자열로 해결할 수 있습니다.Along with the FormattableString.ToString(IFormatProvider) method, you can use the static FormattableString.Invariant method to resolve an interpolated string to a result string for the InvariantCulture. 다음 예제에서는 해당 작업을 수행하는 방법을 보여줍니다.The following example shows how to do that:

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

결론Conclusion

이 자습서에서는 문자열 보간 사용법의 일반적인 시나리오를 설명합니다.This tutorial describes common scenarios of string interpolation usage. 문자열 보간에 대한 자세한 내용은 문자열 보간 항목을 참조하세요.For more information about string interpolation, see the String interpolation topic. .NET에서 형식 서식 지정하는 방법에 대한 자세한 내용은 .NET의 형식 지정복합 서식 지정 항목을 참조하세요.For more information about formatting types in .NET, see the Formatting Types in .NET and Composite formatting topics.

참고 항목See also