11.1 튜플 소개
튜플을 사용하면 여러 개의 개별 값을 이용하여 단일의 복합(composition) 값을 만들 수 있다. 각각의 값이 서로 연관되어 있음에도 새로운 타입을 작성하고 싶지 않다면, 추가적인 캡슐화 작업 없이 간단히 복합 구성을 사용할 수 있다. C# 7은 튜플을 손쉽게 사용할 수 있는 몇 가지 새로운 문법을 포함하고 있다.
예를 들어 일련의 정수 시퀀스가 있고, 한 번 순회하는 동안 최솟값과 최댓값을 모두 찾고 싶다고 가정해 보자. 이러한 작업을 수행하도록 메서드 하나를 만든다면 이 메서드의 반환값을 어떻게 지정해야 할까? 최솟값을 반환값을 통해 받고 최댓값은 out 매개변수를 통해 받거나, 두 값 모두를 out 매개변수를 통해 받을 수도 있다. 하지만 두 방법 모두 투박해 보인다. 일반적인 타입을 작성하면 해결되겠지만, 그리 활용도가 높지 않은 타입을 새로 생성하는 것도 부담이다. 이 경우 .NET 4에서 처음으로 소개된 Tuple<,> 클래스를 사용하여 Tuple<int, int> 타입을 반환하도록 할 수 있다. 다만, 이 경우에도 어떤 값이 최솟값이고 어떤 값이 최댓값인지를 쉽게 설명할 방법이 없다(그리고 그저 값 두 개를 반환하기 위해서 새로운 객체를 생성해야 한다). 또 다른 방법으로는 C# 7의 튜플을 이용하는 방법이 있다. 이 기능을 이용하면 우선 메서드를 다음과 같이 정의할 수 있다.
static (int min, int max) MinMax(IEnumerable<int> source)