String.Format()을 보간 문자열로 대체하라.



[ Content ]

# String.Format()
    . 매서드가 포맷 문자열과 인자 리스트를 분리하여 전달하기 때문에 가독성이 떨어집니다.

    . 전달하고자 하는 인자가 많아 질수록.... 

      포맷 문자열에 나타낸 인자의 개수와 실제로 전달되는 인자의 개수가 정확히 일치하는지 확인이 불편합니다.

누락 시에는 런타임 예외가 발생합니다.



보간 문자열
    . C# 6.0부터 지원해주고 있는 기능입니다.

    . 사용법으로는 문자열 앞에는 $를 붙이고, 문자열로 변경할 표현식은 { }내에 두어 사용합니다.

    . 어느 부분이 어떻게 대체될 지 바로 알 수 있어 예측하기 쉽습니다.

    . 인자를 잘못 전달하거나, 출력 위치를 잘못 지정할 일이 없습니다.




# 보간 문자열을 사용하는 것이 좋은 이유!

    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# 




+ Recent posts