구조 분해
튜플을 여러 변수로 풀어냅니다.
구조 분해은(는) CoddyKit의 무료 C# Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 C# Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. C# Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
구조 분해란 무엇인가요
구조 분해는 튜플이나 객체를 하나의 문장에서 여러 변수로 나누는 기능이므로, 각 부분에 직접 이름을 지정할 수 있습니다.
using System;
class Program
{
static void Main()
{
var point = (3, 4);
(int x, int y) = point;
Console.WriteLine("x=" + x + ", y=" + y);
}
}튜플 구조 분해하기
= 왼쪽의 괄호 안에 대상 변수를 넣으세요. 각 변수에 대응하는 튜플 요소가 할당됩니다.
using System;
class Program
{
static void Main()
{
var user = ("Ada", 36);
(string name, int age) = user;
Console.WriteLine(name + " is " + age);
}
}구조 분해에서 var 사용하기
var를 사용해 컴파일러가 형식을 추론하도록 할 수 있습니다. 변수별로 사용할 수도 있고 전체 그룹에 사용할 수도 있습니다.
using System;
class Program
{
static void Main()
{
var data = (1, "one", true);
var (id, word, flag) = data;
Console.WriteLine(id + " " + word + " " + flag);
}
}메서드 결과 구조 분해하기
메서드가 반환하는 튜플을 이름이 지정된 변수에 바로 구조 분해할 수 있습니다.
using System;
class Program
{
static (int, int) MinMax(int a, int b) => a < b ? (a, b) : (b, a);
static void Main()
{
var (lo, hi) = MinMax(8, 3);
Console.WriteLine("min=" + lo + ", max=" + hi);
}
}값 버리기
구조 분해 중 필요하지 않은 부분을 무시하려면 밑줄 _을 사용하세요.
using System;
class Program
{
static (int, int, int) Rgb() => (255, 128, 0);
static void Main()
{
var (r, _, _) = Rgb();
Console.WriteLine("Red channel: " + r);
}
}기존 변수에 구조 분해하기
형식 이름을 생략하면 이미 선언된 변수에 값을 할당할 수 있습니다.
using System;
class Program
{
static void Main()
{
int a = 0, b = 0;
(a, b) = (10, 20);
Console.WriteLine(a + ", " + b);
}
}튜플로 값 교환하기
유용한 방법이 하나 있습니다. 임시 변수 없이 튜플 구조 분해를 사용해 한 줄에서 두 변수의 값을 교환할 수 있습니다.
using System;
class Program
{
static void Main()
{
int x = 1, y = 2;
(x, y) = (y, x);
Console.WriteLine("x=" + x + ", y=" + y);
}
}Deconstruct 메서드
사용자 정의 클래스는 out 매개 변수를 사용하는 Deconstruct 메서드를 정의하여 구조 분해를 지원할 수 있습니다.
using System;
class Point
{
public int X, Y;
public Point(int x, int y) { X = x; Y = y; }
public void Deconstruct(out int x, out int y)
{
x = X;
y = Y;
}
}
class Program
{
static void Main()
{
var p = new Point(5, 9);
var (px, py) = p;
Console.WriteLine(px + ", " + py);
}
}여러 Deconstruct 오버로드
클래스는 여러 Deconstruct 오버로드를 제공하여 서로 다른 개수의 값을 노출할 수 있습니다.
using System;
class Person
{
public string Name; public int Age; public string City;
public Person(string n, int a, string c) { Name = n; Age = a; City = c; }
public void Deconstruct(out string name, out int age)
{
name = Name; age = Age;
}
}
class Program
{
static void Main()
{
var p = new Person("Ada", 36, "London");
var (name, age) = p;
Console.WriteLine(name + ", " + age);
}
}foreach에서 구조 분해하기
튜플 컬렉션을 반복할 때 foreach 헤더에서 각 요소를 바로 구조 분해할 수 있습니다.
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
var pairs = new List<(string, int)>
{
("Ann", 30),
("Bob", 25)
};
foreach (var (name, age) in pairs)
Console.WriteLine(name + " is " + age);
}
}함께 적용하기
구조 분해를 사용하면 여러 값을 반환하거나 저장하는 코드가 깔끔하게 읽히며, 사용하는 지점에서 각 부분에 이름을 지정할 수 있습니다.
using System;
class Program
{
static (int Quotient, int Remainder) Divide(int a, int b) => (a / b, a % b);
static void Main()
{
var (q, r) = Divide(17, 5);
Console.WriteLine("17 / 5 = " + q + " remainder " + r);
}
}빠른 확인
구조 분해에 대한 이해도를 확인해 보세요.
복습
구조 분해는 하나의 문장에서 튜플이나 객체를 이름이 지정된 변수로 나눕니다. var (a, b) = ...를 사용하고, _으로 일부를 버리며, 변수의 값을 교환하고, foreach에서 구조 분해할 수 있습니다. 사용자 정의 클래스는 out 매개 변수를 사용하는 Deconstruct 메서드로 구조 분해를 지원하며, 필요하면 오버로드할 수도 있습니다.
using System;
class Program
{
static void Main()
{
var (a, b, c) = (1, 2, 3);
Console.WriteLine(a + b + c);
}
}자주 묻는 질문
“구조 분해” 강의는 무료인가요?
네 — “구조 분해” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 C# Academy 강의 전체를 잠금 해제할 수 있습니다. C# Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“구조 분해”에서 뭘 배우나요?
튜플을 여러 변수로 풀어냅니다. 브라우저에서 직접 실행하는 실습 코드로 C# Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
C# Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 C# Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.
“구조 분해” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 C# Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 C# Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.