11.6.4 튜플과 동적 타이핑은 잘 어울리지 않는다
개인적으로 dynamic을 즐겨 쓰는 편은 아니지만, 동적 타이핑과 튜플을 각기 잘 사용하고 있다면이 둘을 함께 사용할 일은 거의 없을 것 같다. 하지만 어찌 되었건 두 기능을 함께 사용하면 두 가지 문제가 발생할 수 있다.
동적 바인더는 튜플 요소의 이름을 알지 못함
튜플 요소의 이름은 컴파일에만 활용될 수 있다. 동적 바인딩에 튜플 요소의 이름을 함께 사용하면 무슨 문제가 발생할까? 다음 예를 살펴보자.
dynamic tuple = (x: 10, y: 20);
Console.WriteLine(tuple.x);
언뜻 보기에 이 코드가 10을 출력할 것처럼 보이지만, 실제로는 다음과 같은 예외가 발생한다.
예외가 처리되지 않음: Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: ''System.ValueTuple<int,int>'에 'x'에 대한 정의가 없습니다.'
안타깝게도, 튜플 요소의 이름을 저장한 채로 동적 바인더가 올바르게 동작하도록 하려면 상당히 많은 부분을 변경해야 한다. 그리고 그렇게 변경된다고 확신할 수도 없다. 출력 부분을 tuple.Item1이라고 수정하면 정상적으로 수행되지만, 이 또한 튜플 요소가 일곱 개를 넘지 않을 때만 가능하다.