11.3.2 튜플 리터럴을 튜플 타입으로 변환
C#의 다른 부분들과 마찬가지로, 튜플 리터럴에 대해서도 암시적 변환과 명시적 변환이 모두 존재한다. 명시적 변환은 앞으로 살펴볼 몇 가지 이유로 인해 그리 자주 사용되는 편은 아니다. 게다가 암시적 변환이 어떻게 동작하는지 이해하고 나면 명시적 변환은 더욱 사용하지 않을 것이다.
암시적 변환
튜플 리터럴은 다음 조건을 모두 만족하면 암시적으로 튜플 타입으로 변환될 수 있다.
• 튜플 리터럴과 튜플 타입의 애리티가 동일
• 튜플 리터럴 내의 표현식이 그에 대응하는 요소의 타입으로 암시적 타입 변환이 가능
첫 번째 조건은 매우 간단하다. 예를 들어 (5, 5)를 (int, int, int)로 변환하는 것은 이상하다. 마지막 값을 결정할 방법이 없기 때문이다. 두 번째 조건은 이보다 좀 더 복잡한데, 예를 통해서 명확히 살펴보자. 다음과 같이 변환하려는 경우를 보자.
(byte, object) tuple = (5, "text");
앞의 설명에 따르면, 변환하려는 튜플 내의 요소들 각각에 대응되는 타입으로 암시적 타입을 변환할 수 있는지 살펴보면 된다. 이 경우 (byte, object) 타입이다. 만약 모든 요소에 대해서 암시적 타입 변환이 가능하면 튜플에 대한 변환 또한 유효한 것으로 판단된다.
▲ 그림 11-4 튜플 요소들에 대한 암시적 타입 변환이 가능한 예