아카이빙/C#

[Effective C#] string.Format()을 보간 문자열로 대체하라

셩님 2018. 6. 30. 02:34

[Effective C#] string.Format()을 보간 문자열로 대체하라

  • C# 6.0에는 보간문자열(Interpolated string)이라는 새로운 기능이 도입되었다.

  • 보간문자열이 뭘까? 예시로 살펴보자

int a = 5;
int b = 13;
string str1, str2;

// 이랬던 것을
str1 = string.Format("{0} + {1} = {2}", a, b, a + b);
Console.WriteLine(str1);

// 이렇게 바꾼다
str2 = $"{a} + {b} = {a + b}";
Console.WriteLine(str2);
  • string.Format() 은 직접 출력해보고 눈으로 확인하기 전까지는 코드를 제대로 작성했는지 쉽게 짐작하기 어려운 반면, 보간 문자열은 포맷 안에 실제 인자가 들어가기 때문에 직관적으로 이해할 수 있다.

  • 보간 문자열을 사용하려면 문자열 앞에 '$'을 붙이면 된다.

Alignment와 FormatString

  • string.Format("{0:N1}", a) 처럼 보간 문자열도 FormatString을 지원한다.

  • 더불어 alignment도 같이 살펴보자.

  • {<interpolatedExpression>,<alignment>:<formatString>}

//Alignment; 값이 양수이면 우측정렬, 음수이면 좌측 정렬이다.
int a = 5, b = 13;
Console.WriteLine($"{a, -5}|{b, 5}");
/* Result
5   |   13
*/

//FormatString
Console.WriteLine($"{Math.PI:F2}");
/* Result
3.14
*/

삼항연산자를 사용할 때

  • 다음과 같이 괄호를 한 번더 씌워야한다.

var rand = new Random();
for(int i = 0; i < 5; i++)
{
   Console.WriteLine($"{(rand.NextDouble() < 0.5 ? "heads" : "tail")}");
}

Miscellaneous

유니티에서는 보간문자열을 쓸 수 있을까?

  • 유니티 2017버전은 기본적으로 .NET 3.5 버전, C# 4.0을 사용하고 있기 때문에 사용할 수 없다.

  • 빌드 세팅에서 스크립팅 런타임 업그레이드 설정을 하면 .NET 4.6 버전을 Experimental 옵션으로 사용할 수 있다. Unstable 하지만 C# 6.0의 문법을 실험해볼 수 있다.


References