튜플은 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이라는 구조체입니다.
• 구조체이므로 가볍고 빠르며, 힙 대신 스택에 저장됩니다
• 튜플은 일회성 데이터나 간단한 결과 반환에 적합합니다.
'C#' 카테고리의 다른 글
배열과 리스트를 정렬하는 방법 (0) | 2025.07.10 |
---|---|
람다를 이용해 버블 정렬 구현하기 (0) | 2025.07.10 |
구조체 배열 선언 시 메모리에서 일어나는 과정 (1) | 2025.07.02 |
물체를 목표 지점에 정확히 도착시키는 방법 (0) | 2025.07.01 |
Visual Studio 메뉴 폰트 크기 조정 (0) | 2025.07.01 |