더북(TheBook)

11.4.4 튜플의 문자열 표현

튜플의 문자열 출력 결과는 C# 소스 코드의 튜플 리터럴과 유사하다. 튜플은 괄호로 묶여 있으며 각각의 요소는 쉼표로 구분된다. 출력 내용을 미세하게 조정할 수 있는 방법은 없다. 예를 들어 기간을 표현하려면 (DateTime, DateTime)과 같이 튜플을 사용할 수 있을 텐데, 두 날짜의 포매팅을 지정하기 위한 포맷 문자열을 전달할 방법은 없다. 튜플의 ToString()null이 아닌 각 요소에 대해 ToString()을 호출해 주고, null인 요소에 대해서는 빈 문자열을 대신 사용한다.

다시 말하지만, 튜플 요소의 이름은 런타임 시에는 전혀 살펴볼 수가 없다. 따라서 ToString() 호출 결과에도 튜플 요소의 이름은 나타나지 않는다. 이러한 출력 결과는 동일한 타입을 반복해서 출력하는 경우라면 몰라도, 익명 타입의 문자열 출력 결과에 비해서는 유용성이 조금 떨어지는 것이 사실이다. 실제로 튜플의 문자열 출력 결과가 어떤지 살펴보자.

var tuple = (x: (string) null, y: "text", z: 10); ----- 튜플 타입을 추론할 수 있도록 null을 문자열로 타입 변환
Console.WriteLine(tuple.ToString()); ----- 콘솔에 튜플 값을 출력

출력 결과는 다음과 같다.

(, text, 10)

다른 작업이 수행되지 않음을 드러내기 위해 ToString()을 명시적으로 호출했지만 Console.WriteLine(tuple)이라고만 작성해도 결과는 동일하다.

튜플의 문자열 출력 결과는 분석용으로 겨우 쓸모 있는 정도여서 사용자에게 이 결과를 직접 보여주는 것은 그리 적절치 못하다. 좀 더 자세한 문맥 정보, 타입의 포맷을 지정하기 위한 정보, null을 어떻게 다룰지에 대한 정보 등을 전달할 수 있었다면 좋았을 것이다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.