튜플(Tuple)이란?
튜플(Tuple)은 여러 개의 속성을 가진 객체를 담아야 할 때, 별도의 클래스나 타입을 새로 정의하지 않고도 데이터를 묶어 관리할 수 있게 해주는 편리한 데이터 구조입니다.
Tuple<T> 클래스는 .NET Framework 4.0에서 처음 도입되었으며, 서로 다른 데이터 타입의 요소들을 하나의 시퀀스로 묶어 저장할 수 있습니다.
Tuple<int, string, string> person = new Tuple<int, string, string>(1, "Test", "Test1");
단, 튜플에는 최대 8개의 요소만 포함할 수 있습니다. 8개를 초과하는 요소를 추가하려고 하면 컴파일 오류가 발생하며, 이 경우 마지막 요소 자리에 중첩 튜플을 넣는 방식으로 해결할 수 있습니다.
리스트(List) 형태의 튜플 초기화
C# 7.0부터 지원되는 값 튜플(ValueTuple) 문법을 사용하면 리스트를 선언함과 동시에 튜플 요소들을 아주 간결하게 초기화할 수 있습니다.
var tupleList = new List<(int, string)>
{
(1, "cow1"),
(5, "chickens1"),
(1, "airplane1")
};배열(Array) 형태의 튜플 초기화
리스트와 마찬가지로 배열 역시 컬렉션 이니셜라이저를 활용해 한 번에 초기화할 수 있습니다.
var tupleArray = new (int, string)[]
{
(1, "cow1"),
(5, "chickens1"),
(1, "airplane1")
};중첩 튜플(Nested Tuple)
요소가 8개를 초과해야 하는 경우, 마지막 위치에 또 다른 튜플을 중첩하여 더 많은 값을 담을 수 있습니다.
var numbers = Tuple.Create(1, 2, 3, 4, 5, 6, 7, Tuple.Create(8, 9, 10, 11, 12, 13));
메서드 매개변수로 튜플 사용하기
튜플은 메서드의 매개변수 타입으로도 활용할 수 있어, 여러 값을 하나의 인자로 전달할 때 유용합니다.
static void DisplayTuple(Tuple<int, string, string> person)
{
}메서드 반환 타입으로 튜플 사용하기
여러 값을 동시에 반환해야 하는 메서드에서 튜플을 반환 타입으로 지정하면, 별도의 클래스나 out 매개변수 없이 깔끔하게 처리할 수 있습니다.
static Tuple<int, string, string> GetTest()
{
return Tuple.Create(1, "Test1", "Test2");
}마무리
이처럼 튜플은 임시 데이터 그룹화, 다중 값 반환, 경량 데이터 전달 등 다양한 상황에서 유용하게 사용됩니다. 최신 C# 프로젝트에서는 참조 타입인 Tuple<T>보다 성능과 가독성이 뛰어난 값 타입 기반의 값 튜플(ValueTuple) 사용을 권장합니다.