Tuple<T1, T2, T3> 클래스는 세 개의 요소를 가진 튜플(3-tuple), 즉 '트리플(triple)'을 나타냅니다. 튜플은 일련의 요소들을 순서대로 저장하는 데이터 구조로, 서로 다른 타입의 값들을 하나의 단위로 묶어 관리할 수 있어 매우 유용합니다.
C# 튜플의 주요 활용 사례
- 데이터 집합에 더 쉽게 접근할 수 있습니다.
- 데이터 집합을 더 편리하게 조작할 수 있습니다.
- 단일 데이터 집합을 하나의 객체로 표현할 수 있습니다.
- 메서드에서 여러 값을 한 번에 반환할 수 있습니다.
- 메서드에 여러 값을 한 번에 전달할 수 있습니다.
Tuple<T1, T2, T3>의 주요 속성
- Item1 — 현재 Tuple<T1, T2, T3> 객체의 첫 번째 구성 요소 값을 가져옵니다.
- Item2 — 현재 Tuple<T1, T2, T3> 객체의 두 번째 구성 요소 값을 가져옵니다.
- Item3 — 현재 Tuple<T1, T2, T3> 객체의 세 번째 구성 요소 값을 가져옵니다.
예제 1: 정수와 문자열을 담은 3-튜플
다음은 C#에서 3-튜플을 생성하고 각 속성에 접근하는 기본적인 예제입니다.
using System;
public class Demo {
public static void Main(string[] args) {
Tuple<int, string, string> tuple = new Tuple<int, string, string>(35, "steve", "katie");
Console.WriteLine("값 (Item1)= " + tuple.Item1);
Console.WriteLine("값 (Item2)= " + tuple.Item2);
Console.WriteLine("값 (Item3)= " + tuple.Item3);
if (tuple.Item1 == 35) {
Console.WriteLine("존재함: 튜플 값 = " + tuple.Item1);
}
if (tuple.Item2 == "jack") {
Console.WriteLine("존재함: 튜플 값 = " + tuple.Item2);
}
if (tuple.Item3 == "katie") {
Console.WriteLine("존재함: 튜플 값 = " + tuple.Item3);
}
}
}
출력 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
값 (Item1)= 35 값 (Item2)= steve 값 (Item3)= katie 존재함: 튜플 값 = 35 존재함: 튜플 값 = katie
주목할 점은 Item2의 값이 "steve"이므로 "jack"과 비교하는 조건문은 실행되지 않아 해당 출력이 생략된다는 것입니다.
예제 2: 문자열 3개를 담은 3-튜플
이번에는 모든 요소가 문자열 타입인 3-튜플을 살펴보겠습니다.
using System;
public class Demo {
public static void Main(string[] args) {
Tuple<string, string, string> tuple = new Tuple<string, string, string>("nathan", "steve", "katie");
Console.WriteLine("값 (Item1)= " + tuple.Item1);
Console.WriteLine("값 (Item2)= " + tuple.Item2);
Console.WriteLine("값 (Item3)= " + tuple.Item3);
if (tuple.Item1 == "nathan") {
Console.WriteLine("존재함: 튜플 값 = " + tuple.Item1);
}
if (tuple.Item2 == "jack") {
Console.WriteLine("존재함: 튜플 값 = " + tuple.Item2);
}
if (tuple.Item3 == "katie") {
Console.WriteLine("존재함: 튜플 값 = " + tuple.Item3);
}
}
}
출력 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
값 (Item1)= nathan 값 (Item2)= steve 값 (Item3)= katie 존재함: 튜플 값 = nathan 존재함: 튜플 값 = katie
참고: C# 7.0 이후의 ValueTuple
.NET Framework 4.7 및 C# 7.0부터는 더 간결한 문법의 ValueTuple을 사용할 수 있습니다. 값 형식(Value Type)이라 메모리 효율이 좋고, 다음과 같이 훨씬 직관적으로 작성할 수 있습니다.
var tuple = (35, "steve", "katie");
Console.WriteLine($"나이: {tuple.Item1}, 이름1: {tuple.Item2}, 이름2: {tuple.Item3}");
다만 기존 Tuple<T1, T2, T3> 클래스는 참조 형식으로 불변(immutable)이며, 레거시 코드나 특정 API와의 호환성이 필요한 경우에 여전히 널리 사용됩니다.