티스토리 뷰

 

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

C#에서도 C에서 널리 사용되는 string.Format과 같은 방법으로 string을 만들 수 있지만 C# 6.0에 새롭게 도입된 문자열 보간 기능을 사용하는 편이 여러모로 좋다.

문자열 보간 기능의 장점

1. 코드 가독성이 매우 좋아진다.

2. 컴파일러 입장에서는 정적 타입 검사를 수행할 수 있기 때문에 개발자의 실수를 미리 방지할 수 있다.

3. 기존 방식에 비해 string을 생성하기 위한 표현식이 다양하다.

기존에 사용되는 string.Format() 형식은 포맷 문자열과 출력할 내용을 담고 있는 배열이 나뉘어 전달되면서 string이 생성된다. 포맷 문자열에 나타난 인수의 개수와 실제 전달된 인수의 개수가 일치하지 않는 등 사소한 실수가 발생할 위험이 있다. 그에 따라, 생성된 string이 맞게 출력되었는지 직접 일일이 확인해봐야하는 번거로움이 생기고, 이는 코딩 시간의 증가로 이어진다.


보간 문자열 사용 방법

1. 문자열 앞에 '$'를 붙인다.

2. string으로 변경할 표현식은 { }에 둔다.

3. 끝!

이를 대체 문자열이라고 하는데 string.Format에 비해 가독성이 아주 좋다.

Console.WriteLine($"The value of pi is {Math.PI}");

또한, 어느 부분이 어떻게 대체될지 바로 알 수 있기 때문에 일부러 출력값을 보지 않더라도 출력값을 예측하기 쉽다. 문자열로 변경할 변수들을 배열 형식으로 따로 전달하지 않기 때문에, 인수의 개수가 틀릴 가능성도 없다.

보간 문자열을 좀더 세련되게 써보자

1. value 타입의 변수가 박싱되는 것을 막자

위 예시를 보면 Math.PI는 double이므로 value 타입이다. 따라서 이를 object 타입으로 변경하려면 박싱을 수행해야 하는데 이런 방식이 너무 자주 행해지면 성능에 악영향을 줄 가능성이 있다. 따라서 아래와 같이 사전에 ToString()을 사용하는 등 미리 string 형태로 변환해놓으면 불필요한 박싱을 피할 수 있다.

Console.WriteLine($"The value of pi is {Math.PI.ToString()}");

2. 삼항 연산자, null 조건 연산자, null 병합 연산자 사용도 가능

문자열 보간 기능을 사용하다 보면 동적으로 동작하는 보간 문자열이 필요할 수도 있다. 이를 위해서 아래와 같이 삼항 연산자 사용도 가능하다. 다만 삼항 연산자를 사용할 때, ':' 의 경우 내장된 표준 포맷 string과 충돌할 위험이 있기 때문에 따로 ( ) 괄호를 넣어줄 필요가 있다.

Console.WriteLine($"The value of pi is {(round ? Math.PI.ToString() : Math.PI.ToString("F2"))}");

null 조건 연산자(null conditional operator)와 null 병합 연산자(null propagation operator)는 다음과 같이 사용한다.

Console.WriteLine($"The customer`s name is {c?.Name ?? "Name is missing"}");

예전에 열심히 string.Format을 사용해서 작업했는데, 같이 코딩 작업하는 분이 리팩토링을 해줬는데

보간 문자열 기능을 보고 씨게 현타 맞았던 기억이 난다.

최신 기능이 좋긴 좋다.

참거 - Effective C# <강력한 C# 코드를 구현하는 50가지 전략과 기법, 이펙티브>, 빌 와그너, 김명신, 한빛미디어

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함