조회 수 6095 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

+ - Up Down Comment Print
?

단축키

Prev이전 문서

Next다음 문서

+ - Up Down Comment Print

https://blog.hexabrain.net/316

https://docs.microsoft.com/ko-kr/dotnet/csharp/tutorials/string-interpolation



C# 6.0에서 문자열 보간(String interpolation)이라는 기능이 새로 추가되었다. 기존에는 주로 복합 형식 지정(Composite Formatting), 즉 String.Format()와 같은 메서드를 사용하여 형식화된 문자열을 출력할 수 있었으나, 문자열 보간을 사용하면 기존의 방법보다 더 읽기 쉽고 편리하게 형식화된 문자열을 만들 수 있다고 한다.


대체 어떤 녀석일까? 바로 확인해보자.

string name = "마크";
var date = DateTime.Now;
// 복합 형식 지정(Composite formatting):
Console.WriteLine("안녕, {0}! 오늘은 {1}, {2:HH:mm}이야.", name, date.DayOfWeek, date);
// 문자열 보간(String interpolation):
Console.WriteLine($"안녕, {name}! 오늘은 {date.DayOfWeek}, {date:HH:mm}이야.");
// 두가지 방법 모두 다 아래와 같은 출력 결과가 나온다.
// 안녕, 마크! 오늘은 수요일, 19:40이야.

뒤에 전달인자를 주렁주렁 매달아두는 방법 보다는 확실히 아름답다. 복합 형식 지정에선 가끔 전달인자를 빼먹어 FormatException와 부딪히기도 하고, 중간에 형식 문자열을 변경할 때 인덱스를 일일히 수정해야하는 귀찮음이 있기도 했는데 문자열 보간은 상당히 직관적이다.


그럼 이제 문자열 보간이란 녀석은 어떻게 사용하는건지 알아보자. 우선 문자열 리터럴을 보간된 문자열로 식별하기 위해선 앞에 $ 기호를 추가해야 한다고 한다.

$"{name}{age}살이야."


보간된 문자열의 구조

그리고 보간된 문자열의 구조를 살펴보면 아래와 같다. 

{<interpolatedexpression>[,<alignment>][:<formatstring>]}

기존의 방법과 별 차이가 없다.

Console.WriteLine($"|{"왼쪽",-7}|{"오른쪽",7}|");
const int FieldWidthRightAligned = 20;
Console.WriteLine($"{Math.PI,FieldWidthRightAligned} - 원주율의 기본 형식");
Console.WriteLine($"{Math.PI,FieldWidthRightAligned:F3} - 원주율 pi를 소수점 셋째자리까지 나타내기");

결과:

|왼쪽     |    오른쪽|

    3.14159265358979 - 원주율의 기본 형식

               3.142 - 원주율 pi를 소수점 셋째자리까지 나타내기


조건부 삼항 연산자 사용하기

보간된 표현식에서 조건부 삼항 연산자(?:)를 사용할 수도 있다. 보간된 문자열의 구조에서 콜론(:)이 특별한 의미를 가지고 있어서, 조건식을 아래와 같이 괄호로 묶어 사용해야 한다.

bool b = ...;
string s = $"결과는 {(b ? "참" : "거짓")}이다.";


보간된 문자열에서 중괄호의 사용

중괄호를 사용하고 싶다면 아래와 같이 중괄호를 연이어서 쓰면 된다.

$"public {prob.Type} {prob.Name} {{ get; private set; }}";





-----------------------------------------------------------------------------------------------------------





C#의 문자열 보간

이 자습서에서는 문자열 보간을 사용하여 결과 문자열에서 식 결과의 서식을 지정하고 포함하는 방법을 보여줍니다. 예제에서는 사용자가 기본 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)}");

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

이 예제에서 볼 수 있듯이 중괄호를 포함하여 보간된 문자열에 식을 포함합니다.

C#
{<interpolationExpression>}

보간된 문자열은 문자열 복합 서식 지정 기능의 모든 기능을 지원합니다. 따라서 String.Format 메서드를 사용할 때 보다 읽기 쉬운 대안이 됩니다.

보간 식에 대한 서식 문자열을 지정하는 방법

콜론(":")과 형식 문자열을 사용하여 보간 식에 따라 식 결과의 형식에서 지원하는 형식 문자열을 지정합니다.

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#
{<interpolationExpression>,<alignment>:<formatString>}

다음 예제에서는 맞춤을 지정하고 파이프 문자("|")를 사용하여 텍스트 필드를 구분하는 방법을 보여줍니다.

C#
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|

출력 표시 예제에서 볼 수 있듯이 서식이 지정된 식 결과의 길이가 지정된 필드 너비를 초과하는 경우 맞춤 값은 무시됩니다.

자세한 내용은 복합 서식 지정 항목의 맞춤 구성 요소 섹션을 참조하세요.

보간된 문자열에서 이스케이프 시퀀스를 사용하는 방법

보간된 문자열에서는 일반 문자열 리터럴을 사용할 수 있는 모든 이스케이프 시퀀스를 지원합니다. 자세한 내용은 문자열 이스케이프 시퀀스를 참조하세요.

이스케이프 시퀀스를 문자 그대로 해석하려면 약어 리터럴 문자열을 사용합니다. 보간된 약어 문자열은 @ 문자가 뒤에 오는 $ 문자로 시작합니다. C# 8.0부터는 $ 및 @ 토큰을 순서에 관계없이 사용할 수 있습니다. $@"..." 및 @$"..."는 모두 유효한 보간된 약어 문자열입니다.

중괄호("{" 또는 "}")를 포함하려면 결과 문자열에서 2개의 중괄호("{{" 또는 "}}")를 사용합니다. 자세한 내용은 복합 서식 지정 항목의 중괄호 이스케이프 처리 섹션을 참조하세요.

다음 예제에서는 결과 문자열에 중괄호를 포함하고 약어 보간된 문자열을 만드는 방법을 보여줍니다.

C#
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개로 구성된 ?: 조건부 연산자를 사용하는 방법

보간 식에서 콜론(":")에 특별한 의미가 있으므로 식에서 조건부 연산자를 사용하기 위해 다음 예제에서 볼 수 있듯이 해당 식을 괄호로 묶습니다.

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

문자열 보간을 사용하여 문화권별 결과 문자열을 만드는 방법

기본적으로는 보간된 문자열은 모든 서식 지정 작업에 대해 CultureInfo.CurrentCulture 속성에서 정의한 현재 문화권을 사용합니다. System.FormattableString 인스턴스에 대한 보간된 문자열의 암시적 변환을 사용하고 해당 ToString(IFormatProvider) 메서드를 호출하여 문화권별 결과 문자열을 만듭니다. 다음 예제에서는 해당 작업을 수행하는 방법을 보여줍니다.

C#
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 인스턴스를 사용하여 다양한 문화권에 여러 결과 문자열을 생성할 수 있습니다.

고정 문화권을 사용하여 결과 문자열을 만드는 방법

FormattableString.ToString(IFormatProvider) 메서드와 함께 고정 FormattableString.Invariant 메서드를 사용하여 InvariantCulture에서 보간된 문자열을 결과 문자열로 해결할 수 있습니다. 다음 예제에서는 해당 작업을 수행하는 방법을 보여줍니다.

C#
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의 형식 지정 및 복합 서식 지정 항목을 참조하세요.


나눔글꼴 설치 안내


이 PC에는 나눔글꼴이 설치되어 있지 않습니다.

이 사이트를 나눔글꼴로 보기 위해서는
나눔글꼴을 설치해야 합니다.

설치 취소

Designed by sketchbooks.co.kr / sketchbook5 board skin

Sketchbook5, 스케치북5

Sketchbook5, 스케치북5

Sketchbook5, 스케치북5

Sketchbook5, 스케치북5