C#에서 튜플(Tuple)은 하나의 메서드에서 여러 개의 값을 반환해야 할 때 ref나 out 매개변수를 사용하지 않고도 손쉽게 처리할 수 있도록 해주는 유용한 자료 구조입니다.
또한 튜플을 활용하면 여러 값을 하나의 매개변수로 묶어서 메서드에 전달할 수 있으며, 튜플 안에 튜플을 중첩(nesting)하는 것도 가능합니다.
튜플의 주요 사용 사례
- 여러 값 반환: 별도의 클래스나 구조체를 정의하지 않고도 메서드에서 여러 값을 한 번에 반환할 수 있습니다.
- 매개변수 전달: 관련된 여러 값을 하나의 매개변수로 묶어 메서드에 깔끔하게 전달할 수 있습니다.
- 중첩 구조: 튜플 안에 또 다른 튜플을 포함시켜 복잡한 데이터를 표현할 수 있습니다.
예제 1: 튜플을 매개변수로 전달하기
아래 예제는 튜플을 생성하여 메서드의 인자로 전달하고, 각 요소(Item1, Item2, Item3)에 접근해 출력하는 방법을 보여줍니다.
class Program{
static void DisplayTupleValues(Tuple<int, string, string> dummy){
Console.WriteLine($"Id = { dummy.Item1}");
Console.WriteLine($"Value1 = { dummy.Item2}");
Console.WriteLine($"Value2 = { dummy.Item3}");
}
static void Main(){
var dummy = Tuple.Create(1, "Dummy", "Tuple");
DisplayTupleValues(dummy);
Console.ReadLine();
}
}실행 결과
Id = 1 Value1 = Dummy Value2 = Tuple
예제 2: 튜플을 반환 타입으로 사용하기
메서드의 반환 타입으로 튜플을 지정하면, 여러 값을 동시에 반환할 수 있습니다. 호출 측에서는 반환된 튜플의 각 항목에 접근하여 값을 사용하면 됩니다.
class Program{
static Tuple<int, string, string> ReturnTuple(){
return Tuple.Create(1, "Value1", "Value2");
}
static void Main(){
var returnValues = ReturnTuple();
System.Console.WriteLine($"{returnValues.Item1} {returnValues.Item2} {returnValues.Item3}");
Console.ReadLine();
}
}실행 결과
1 Value1 Value2
정리
튜플은 간단한 데이터 그룹을 임시로 다룰 때 특히 유용합니다. 다만 C# 7.0 이상에서는 (int, string) 형태의 값 튜플(ValueTuple)과 명명된 요소(named elements)를 지원하므로, 최신 코드에서는 더욱 직관적인 문법을 활용하는 것이 좋습니다.