String.Format()을 보간 문자열로 대체하라.
[ Content ]
# String.Format()
. 매서드가 포맷 문자열과 인자 리스트를 분리하여 전달하기 때문에 가독성이 떨어집니다.
. 전달하고자 하는 인자가 많아 질수록....
포맷 문자열에 나타낸 인자의 개수와 실제로 전달되는 인자의 개수가 정확히 일치하는지 확인이 불편합니다.
누락 시에는 런타임 예외가 발생합니다.
. 사용법으로는 문자열 앞에는 $를 붙이고, 문자열로 변경할 표현식은 { }내에 두어 사용합니다.
. 어느 부분이 어떻게 대체될 지 바로 알 수 있어 예측하기 쉽습니다.
. 인자를 잘못 전달하거나, 출력 위치를 잘못 지정할 일이 없습니다.
# 보간 문자열을 사용하는 것이 좋은 이유!
1. 코드의 가독성이 대폭 향상된다.
2. 정적 타입 검사를 수행할 수 있어 개발자의 실수를 미연에 방지한다.
3. 기존 문자열 포매팅 방식에 비해 문자열을 생성하기 위한 표현식이 더 풍성하다.
# 주의 사항
: 값 형식의 인자를 전달할 때, 문자열로 변경하여 사용하면 좋다!
. 문자열 보간 기능을 사용하더라도 실제 C# 컴파일러는 Param을 이용하여 Object 배열을 전달합니다.
예를 들어, 아래에서 보면 Math.PI를 인자로 전달하고 있습니다.
Math.PI는 double 형으로 컴파일러가 인자를 전달하게 되면,
double -----> object 으로의 박싱을 수행하게 됩니다.
이러한 약간의 코드가 성능에 큰 영향을 미치진 않겠지만,
너무 자주 사용하거나 많은 루프 내에 사용한다면 좋지 않은 영향을 미칠 수 있습니다.
이런 문제는 ToString( )을 사용하여 전달할 인자를 사전에 문자열로 변경하면 컴파일러의 값 박싱을 방지할 수 있습니다.
: 보간 문자열에서 삼항연산자를 사용할 수 있다, 다만 괄호로 묶어주자!
. ' : '(조건 표현식)을 문자열 보간 기능과 같이 사용하게 되면 약간의 충돌이 발생할 수 있는데,
C#은 ' : '을 표맷 문자열의 시작이라 판단하기 때문입니다.
=> 컴파일 오류가 발생하는 것을 볼 수 있습니다.
이러한 문제는 아래와 같이 ( )괄호로 묶어 사용하면 해결이 가능해집니다!
: 보간 문자열 중첩 사용도 가능하지만, 적당히 사용하자!
. 마지막으로 보간 문자열의 표현식은 중첩해서 사용도 가능합니다.
하지만 무엇이든 그렇듯, 과도하게 사용하면 이해하기 어려운 코드가 될 수 있습니다.
[ Digression ]
공부하면서 String.Format( )과 문자 보간열에 대한 정보를 찾아본 결과,
문자 보간열도 컴파일 타임에서 String.Format( )으로 바뀌어 성능상 큰 차이는 없는 것으로 보입니다.
다만, 문자열을 합치는 경우에는 (String Builder, concat과 같은) 여러 방법 중 문자 보간열이 가장 느린 것으로 결과가 나왔습니다.
참 고 : Effective C#
'책 > Effective C#' 카테고리의 다른 글
Item 6. nameof( ) 연산자를 적극 활용하라. (0) | 2019.01.31 |
---|---|
Item 5. 문화권별로 다른 문자열을 생성하려면 FormattableString을 사용하라. (0) | 2019.01.30 |
Item 3. 캐스트보다는 is, as가 좋다. (0) | 2018.10.26 |
Item 2. const보다는 readonly가 좋다. (0) | 2018.09.28 |
Item 1. 지역 변수를 선언할 때는 var를 사용하는 것이 낫다. (0) | 2018.09.22 |