C# 4.0 튜플(Tuple)이란?
튜플(Tuple)은 서로 다른 데이터 타입의 요소들을 하나로 묶어 저장하는 순차적 자료 구조입니다. C# 4.0에서 처음 도입되었으며, 메서드에서 여러 값을 한 번에 반환하거나 서로 연관된 데이터를 임시로 그룹화해 전달할 때 매우 유용합니다.
튜플의 가장 큰 장점은 각 요소의 타입을 일일이 새로운 클래스나 구조체로 정의하지 않고도 Tuple<T> 인스턴스를 바로 만들 수 있다는 점입니다.
튜플의 주요 특징
- 서로 다른 타입 조합: int, string 등 다양한 타입을 하나의 튜플에 담을 수 있습니다.
- 최대 8개 요소 지원: 8개 이상이 필요하면 마지막 요소(Rest)에 중첩 튜플을 넣어 확장할 수 있습니다.
- 불변(Immutable) 구조: 한번 생성된 튜플의 요소 값은 변경할 수 없습니다.
- Item 속성 접근: 각 요소는 Item1, Item2 … 형태의 읽기 전용 속성으로 접근합니다.
두 개의 요소를 가진 튜플 선언하기
가장 많이 사용되는 형태인 두 개의 요소를 가진 튜플을 만들어 보겠습니다. 선언 방법은 다음과 같습니다.
Tuple<int, string> person = new Tuple<int, string>(32, "Steve");
위 코드는 정수 32와 문자열 "Steve"를 각각 첫 번째, 두 번째 요소로 갖는 튜플을 생성합니다.
튜플 요소에 접근하는 방법
튜플의 각 요소는 Item1, Item2 속성을 통해 읽을 수 있습니다.
먼저 첫 번째 요소(정수형)를 확인하는 코드입니다.
if (tuple.Item1 == 99) {
Console.WriteLine(tuple.Item1);
}다음은 두 번째 요소(문자열)를 확인하는 코드입니다.
if (tuple.Item2 == "Steve") {
Console.WriteLine(tuple.Item2);
}전체 예제
정수와 문자열을 함께 담은 튜플을 생성하고, 각 요소를 조건에 맞게 출력하는 전체 코드입니다.
using System;
namespace Demo {
class Program {
static void Main(string[] args) {
Tuple<int, string> tuple = new Tuple<int, string>(50, "Tom");
if (tuple.Item1 == 50) {
Console.WriteLine(tuple.Item1);
}
if (tuple.Item2 == "Tom") {
Console.WriteLine(tuple.Item2);
}
}
}
}
실행 결과
50
Tom
조건이 참이 된 Item1과 Item2의 값이 차례로 화면에 출력됩니다.
참고: Tuple.Create로 더 간결하게 작성하기
Tuple.Create 정적 메서드를 사용하면 제네릭 타입 인자를 명시하지 않아도 컴파일러가 타입을 자동으로 추론하므로 코드를 더 간결하게 만들 수 있습니다.
var person = Tuple.Create(32, "Steve");
이처럼 C# 4.0의 튜플은 별도의 타입 정의 없이 여러 값을 손쉽게 묶어 다룰 수 있는 실용적인 기능입니다. 다만 요소 이름이 Item1, Item2처럼 고정되어 있어 의미 전달이 약한 편이므로, C# 7.0 이상에서는 값 튜플(ValueTuple)과 명명된 요소를 함께 고려해 보는 것도 좋습니다.