여러 문화권과 다양한 언어를 다뤄야 하는 경우 세부적인 제어가 필요하기 때문에 문자열을

생성하는 과정을 좀 더 자세히 알고 있어야 한다.

문자열 보간 기능을 사용할 때 사용자가 하는 작업이라고는 ‘$’ 문자를 선두에 추가하고 생성할

구조를 잡아 문자열을 만드는 것이 전부다. 대부분의 경우 이러한 작업은 매우 간단하게 이뤄진다.

특이한 것은 문자열 보간 기능의 결과로 생성되는 반환값은 문자열일 수도 있지만 FormattableString

을 상속한 타입일 수도 있다는 점이다.

다음은 문자열 보간 기능을 사용하여 새로운 문자열을 생성하는 코드다.

string first = $"It's the {DateTime.Now.Day} of the {DateTime.Now.Month} month";

다음은 문자열 보간 기능을 이용하여 FormattableString을 상속한 타입의 객체를 생성하는 코드다.

FormattableString second = $"It's the {DateTime.Now.Day} of the {DateTime.Now.Month} month";

만약 다음 코드와 같이 third를 var로 선언하면 이 변수는 string 객체가 될 수도 있겠지만 FormattableString을 상속한 타입의 객체가 될 수도 있다.

var third = $"It's the {DateTime.Now.Day} of the {DateTime.Now.Month} month";

실제로 이 코드를 컴파일하면 컴파일러는 컴파일타임의 몇 가지 조건을 고려하여 서로 다른 코드를

생성한다. 만약 third가 string이 아니라 FormattableString을 상속한 타입의 객체라면 이를 통해 현재

컴퓨터에 지정된 문화권을 고려하여 문자열을 생성할 수 있다. 즉, 이코드를 미국에서 수행하면 소수

점 기호 ’ . ’가 되고, 유럽에 속한 대부분의 국가에서 수행하면 소수점 기호 ‘ , ’가 생성되도록 할 수 있

다.

사용자는 문자열 혹은 FormattableString 타입의 객체를 생성할 수도 있는 컴파일러의 특성을 잘