0Pricing
C# Academy · 강의

구조 분해

튜플을 여러 변수로 풀어냅니다.

구조 분해은(는) 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 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 값 튜플 기초
  2. 이름이 지정된 튜플 요소
  3. 구조 분해
  4. 메서드 반환값으로 사용하는 튜플
← C# Academy(으)로 돌아가기