티스토리 뷰

 

5) 문화권별로 다른 문자열을 생성하려면 FormattableString을 사용하라

앞선 보간 문자열을 다루는 글에서 문자열 보간 기능을 이용해서 가독성 좋은 string 생성 방법을 배웠다. 하지만 여러 문화권과 다양한 언어를 다뤄야 하는 경우에는 좀더 세부적인 제어가 필요하기 때문에 문자열을 생성하는 과정을 조금 더 자세히 알아둬야 한다.

앞의 글에서 다뤘듯이, 문자열 보간 기능을 이용해서 string을 생성할 경우 아래 코드와 같이 선두에 '$'를 붙이고 중괄호 { }를 사용해서 string을 생성하는 것이 전부다. 근데 특이한 것은 이 보간 기능의 결과로 생성되는 반환값의 타입이 string일 수도 있지만 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";

위 코드에서 var이 FormattableString을 상속한 객체가 된다면 현재 컴퓨터에 지정된 문화권을 고려한 string을 생성할 수 있다.


FormattableString 사용 방법

다음 코드는 FormattableString 타입의 객체를 이용하여 문화권과 언어를 지정하여 string을 생성하는 메서드다.

public static string ToGerman(FormattableString src)
{
return string.Format(null, System.Globalization.CultureInfo.CreateSpecificCulture("de-de"), src.Format, src.GetArguments());
}
public static string ToFrenchCanada(FormattableString src)
{
return string.Format(null, System.Globalization.CultureInfo.CreateSpecificCulture("fr-CA"), src.Format, src.GetArguments());
}

문자열 보간 기능은 글로벌화나 로컬화에 필요한 거의 모든 기능을 갖추고 있다. 게다가 문화권을 고려하여 문자열을 생성하는 내부적인 복잡함을 잘 감추고 있기도 하다.

문화권을 임의로 지정해야 하는 경우에는 명시적으로 FormattableString을 타입의 객체를 생성하도록 코드를 작성하고 이 객체를 통해 문자열을 얻어 오는 방법을 사용하는 것이 좋다.


아직 문화권, 언어별로 string을 다뤄본 적이 없어서 생소한 부분이 많았다.

이번 기회에 지금 만들고 있는 앱에 FormattableString을 적용시켜 보는 쪽으로 작업해야 겠다.

참거 - Effective C# <강력한 C# 코드를 구현하는 50가지 전략과 기법, 이펙티브>, 빌 와그너, 김명신, 한빛미디어

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함