String.Format 메서드 (링크)
String s = String.Format("The current price is {0} per ounce.",
pricePerOunce);
Console.WriteLine(s);
생성된 문자열을 직접 출력해보고 올바른 형태인지 직접 확인하기 전까지 코드를 제대로 작성했는지 확인이 어려움
- 포맷 문자열과 인자리스트를 분리하여 전달
- 포맷 문자열에 나타낸 인자의 개수와 실제 전달되는 인자의 개수가 일치하는지 확인하지 않음.
- 개발자의 실수로 누락하여 런타임 에러가 발생할 수 있음
$ 문자열 보간 (링크)
string name = "Mark";
var date = DateTime.Now;
// Composite formatting:
Console.WriteLine("Hello, {0}! Today is {1}, it's {2:HH:mm} now.", name, date.DayOfWeek, date);
// String interpolation:
Console.WriteLine($"Hello, {name}! Today is {date.DayOfWeek}, it's {date:HH:mm} now.");
// Both calls produce the same output that is similar to:
// Hello, Mark! Today is Wednesday, it's 19:40 now.
사용규칙
- $를 문자열 앞에 붙여서 사용.
- 문자열로 변경할 표현식은 {} 중괄호안에 둔다.
문자열 보간($)의 장점
1) 코드 가독성 향상
2) 컴파일러 입장에서 정적타입 검사 수행하여, 개발자 실수 미리 확인
3) 문자열을 생성하기 위한 표현식 더 풍성하게 사용
4) 인자 전달에 오류가 없다.
박싱과 언박싱
Console.WriteLine($"The value of pi is {Math.PI}");
사용자가 문자열 보간을 사용하더라도 실제 C# 컴파일러는 param을 이용하여 object 배열을 전달하는 기존 포매팅 함수를 호출하도록 코드를 생성한다. 위 예제는 Math.PI는 double형이므로 이를 object타입으로 변경하는 박싱을 수행한다. 이러한 박싱은 너무 자주 사용하거나 루프 내에서 사용하게 되면 성능에 좋지 않을 수 있다. 이러한 경우 미리 전달할 인자를 문자열로 변경하면 값 타입이 박싱되는 것을 피할 수 있다.
Console.WriteLine($"The value of pi is {Math.PI.ToString()}");
':' 조건 연산자 사용
Console.WriteLine($"The value of pi is {round ? Math.PI.ToString() : Math.PI.ToString("F2")}");
'?', '??' 연산자 사용
Console.WriteLine($"The customer's name is {c?.Name ?? "Name is missing"}");
728x90
'Software Development > C#' 카테고리의 다른 글
[Effective C#] nameof() 연산자 (0) | 2021.01.24 |
---|---|
[Effective C#] 문화권별로 다른 문자열을 생성하려면 FormattableString을 사용하라 (0) | 2021.01.21 |
[Effective C#] 캐스트보다는 is, as가 좋다. (0) | 2021.01.16 |
[Effective C#] const보다는 readonly 사용하기 (0) | 2021.01.13 |
[Effective C#] 지역변수 선언은 var를 사용/var 이해하기 (0) | 2021.01.09 |