1. 개념 설명
튜플은 여러 값을 간단히 묶는 값 형식입니다. C# 7부터 도입된 ValueTuple과 요소 이름 지정으로 읽기 쉬운 코드를 작성합니다. 메서드에서 여러 값을 반환하거나, 반환값을 곧바로 분해해 지역 변수로 받을 수 있습니다. 또한 _ 버리기(discard)와 foreach 분해도 지원합니다.
2. 코드 예제
아래 예제는 생성, 메서드 반환, 분해, discard, foreach 분해를 모두 보여줍니다. 콘솔 출력으로 결과를 확인할 수 있습니다.
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
var point = (x: 3, y: 5);
var (x, y) = point;
Console.WriteLine($"point=({x},{y})");
int[] nums = {1,2,3,4};
var (sum, avg) = Stats(nums);
Console.WriteLine($"sum={sum}, avg={avg:F1}");
var (_, last) = SplitName("Ada Lovelace");
Console.WriteLine($"last={last}");
var people = new List<(int id, string name)>{ (1,"Neo"), (2,"Trinity") };
foreach (var (id, name) in people)
Console.WriteLine($"{id}:{name}");
}
static (int sum, double avg) Stats(int[] arr)
{
int s = 0;
foreach (var n in arr) s += n;
double a = arr.Length > 0 ? (double)s / arr.Length : 0;
return (s, a);
}
static (string first, string last) SplitName(string full)
{
var parts = full.Split(' ', StringSplitOptions.RemoveEmptyEntries);
if (parts.Length == 0) return ("", "");
if (parts.Length == 1) return (full, "");
return (parts[0], parts[parts.Length - 1]);
}
}
3. 주의사항/팁
튜플은 값 형식이라 복사가 발생할 수 있으니 큰 튜플을 반복 전달하는 것은 피하는 것이 좋습니다. 공개 API에 남발하기보다 의미가 중요한 경우 record/전용 struct를 고려합니다. C# 7+가 필요하며, 구버전 .NET Framework에서는 System.ValueTuple 패키지를 설치해야 합니다. 직렬화나 로깅에서 요소 이름이 보존되지 않을 수 있어 계약에는 주의합니다.
'C#' 카테고리의 다른 글
| C# 람다 식 (Lambda Expression) (1) | 2026.04.09 |
|---|---|
| C# using 문과 IDisposable (0) | 2026.04.08 |
| C# IEnumerable vs IQueryable (0) | 2026.04.07 |
| C# Span<T>과 Memory<T> (0) | 2026.04.07 |
| C# Switch 표현식 (Switch Expression) (0) | 2026.04.07 |