더북(TheBook)

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이라고 수정하면 정상적으로 수행되지만, 이 또한 튜플 요소가 일곱 개를 넘지 않을 때만 가능하다.

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