본문 바로가기
C#

C#에서 튜플(Tuple)이란?

by Oz Driver 2025. 7. 9.

튜플은 C# 7.0 부터 지원하는 여러 값 (최대 7개) 을 한 번에 묶어서 저장할 수 있는 구조입니다.

최대 7개의 값을 다룰 수 있으며, 별도의 타입 정의 없이 간단하게 여러 값을 하나로 다룰 수 있다는 것이 특징입니다.

 

ValueTuple 은 구조체 

// 실제 소스 일부 (System.ValueTuple.cs)
public struct ValueTuple<T1, T2>
{
    public T1 Item1;
    public T2 Item2;
    // …
}

 

코드에서 보면 알 수 있듯이, 내부는 단순한 구조체 입니다. 

그럼 언제, 어떻게 쓰이는지 알아보겠습니다. 

 

기본 사용법

튜플은 직접 ValueTuple<T1, T2>로 선언할 수도 있고, 간편하게 var를 사용할 수도 있습니다.

// 1. 명시적 타입 지정
ValueTuple<string, int> student;
student.Item1 = "영희";
student.Item2 = 90;

// 2. var로 간결하게 선언
var student = ("영희", 90);

Console.WriteLine(student.Item1); // "영희"
Console.WriteLine(student.Item2); // 90

 

이름 붙인 튜플

튜플에 이름을 붙이면, 필드인 Item1, Item2, ... 대신 가독성이 좋아집니다.

(string name, int score) student = ("영희", 90);
Console.WriteLine(student.name);  // "영희"
Console.WriteLine(student.score); // 90

 

함수에서 여러 값 반환하기

튜플은 함수에서 여러 값을 한꺼번에 반환할 때도 자주 사용됩니다.
기존에는 out 키워드를 야 했지만, 튜플 덕분에 훨씬 간결해졌습니다.

(int sum, int diff) = Calculate(7, 3);

static (int, int) Calculate(int a, int b)
{
    return (a + b, a - b);
}

 

이렇게 튜플 분해를 사용하면 리턴값이 하나만 가능하다는 제약을 쉽게 넘을 수 있습니다.

 

튜플 스왑 : 가장 실용적인 활용이 아닐까?

튜플 문법은 변수의 값을 서로 바꿀 때(스왑) 자주 쓰입니다.

int a = 1, b = 2;
(a, b) = (b, a);

 

튜플을 사용하지 않았다면, 아래처럼 temp 변수를 만들어야 했습니다.

int a = 1, b = 2;
int temp = a;
a = b;
b = temp;

 

내부적으로는 다음과 같이 동작합니다.

var temp = (b, a);  
a = temp.Item1;     
b = temp.Item2;

 

• 우변 (b, a) 는 실제 튜플 객체입니다.

  좌변 (a, b) 는 튜플 객체가 아니라 "변수 목록" 입니다.

  하지만 C# 컴파일러는 이 문법을 통해 값을 동시에 나눠 담는 구조로 인식합니다.

  괄호로 묶어야 “튜플 분해” 문법으로 제대로 작동합니다. 그렇지 않으면 문법 오류가 발생합니다.

 

마무리

  C# 튜플은 ValueTuple이라는 구조체입니다.

  구조체이므로 가볍고 빠르며, 힙 대신 스택에 저장됩니다

  튜플은 일회성 데이터나 간단한 결과 반환에 적합합니다.