본문 바로가기
책/Effective C#

Effective C# - Item5 문화권별로 다른 문자열을 생성하려면 FormattableString을 사용하라

by 코딩하는 돼징 2023. 11. 16.
반응형
 

Effective C# - Item4 : string.Format()을 보간 문자열로 대체하라

string.Format() 특정 형식을 가진 문자열을 만들기 위해 포맷 문자열과 해당 문자열에 삽입될 인자들을 사용한다. 하지만 이 메서드가 가진 한계들로 인해 코드 작성 및 디버깅이 어려워 질 수 있다

code-piggy.tistory.com

앞서 Item4에서 문자열 보간 기능을 통해 변수와 서식을 결합하여 간편하게 문자열을 만들 수 있음을 확인했다. 하지만 여러 문화권과 다양한 언어를 다뤄야하는 경우 더 세부적인 제어가 필요하다. 이를 위해 문자열을 생성하는 과정을 좀 더 자세히 알아야 한다.


 

문자열 보간 기능의 결과로 생성되는 반환값은 문자열일 수도 있지만 FormattableString을 상속한 타입일 수도 있다.

 

소수점으로 예시 

1. string 타입의 객체

소수점 기호는 문화권과 관계 없이 항상 '.'로 표현된다.

string value = $"Value: {12345.6789}";

2.FormattableString을 상속한 타입의 객체

현재 문화권을 고려하여 생성된다.

var value = $"Value: {12345.6789}";

 

01 미국인 경우

미국 문화권인 경우 소수점 기호기 '.'로 생성된다.

Value: 12345.6789

02 유럽인 경우

유럽의 대부분 국가에서는 소수점 기호가 ','로 생성된다.

Value: 12345,6789

FormattableString 타입의 객체를 이용하여 문화권과 언어를 지정하여 문자열을 생성하는 방법

아래 코드는 FormattableString타입의 입력을 받아서 미국 문화권에 따라 문자열을 생성한다.

public static string ToUS(FormattableString src)
{
    return string.Format(null,
        System.Globalization.CultureInfo.CreateSpecificCulture("en-US"),
        src.Format, src.GetArguments());
}

 

매개변수

null : 현재 쓰레드의 문화권을 사용하도록 지정

CultureInfo : 'CreateSpecificCulture("en-US")'를 통해 생성된 "en-US"문화권을 사용

Format : 'src.Format'에서 가져온 서식 지정된 문자열 사용

Arguments : 'src.GetArguments()'에서 가져온 값들을 사용하여 해당하는 서식 지정항목들 대체

결과적으로 서식 지정된 문자열을 생성하고 해당 문자열 내의 서식 지정 항목들을 적절한 값으로 대체하여 반환한다.


사용 예시

en-US 문화권에서의 문자열 생성

var formattableStringUS = $"Value: {12345.6789}";
string resultUS = ToUS(formattableStringUS);
Console.WriteLine($"US FormattableString Value: {resultUS}");

 

 

 

 

 

결론

문자열 보간 기능은 글로벌화와 지역화를 위한 다양한 기능을 제공하며 문화권을 고려하여 문자열을 생성하는 내부적인 복잡함을 효과적으로 감추고 있다. 만약 특정한 문화권을 명시적으로 지정해야 하는 경우 명시적으로 FormattableString 타입의 객체를 생성하고 이를 활용하여 문자열을 얻어오는 방법을 사용하는 것이 좋다.

 

 

 

 

본 게시글은 Effective C#을 읽고 정리하였습니다.

반응형

댓글