끝나지 않는 프로그래밍 일기

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