C# 7.0에서 도입된 분해자(Deconstructor)는 객체의 속성 값을 여러 개의 변수로 한 번에 꺼내어 할당할 수 있게 해주는 기능입니다. 이는 함수형 프로그래밍에서 가져온 새로운 튜플(tuple) 문법의 일부로, 기존의 Tuple<> 클래스와는 전혀 관련이 없습니다.
분해자의 주요 특징
분해자는 Deconstruct라는 키워드를 사용한 메서드로 정의하며, 다음과 같은 특징을 가집니다.
- 메서드 이름은 반드시
Deconstruct여야 하며, 모든 매개변수는out한정자를 사용해야 합니다. - 같은 프로그램 내에서
out매개변수의 개수가 동일한 여러 분해자 메서드를 정의할 수 있습니다. - 매개변수의 개수와 타입이 같더라도 순서가 다르면 오버로드가 가능합니다.
예제 코드
아래 예제는 Employee 클래스에 분해자를 정의하고, 이를 활용해 객체의 속성을 세 개의 변수로 분해하는 방법을 보여줍니다.
public class Employee
{
public Employee(string employeename, string firstName, string lastName)
{
Employeename = employeename;
FirstName = firstName;
LastName = lastName;
}
public string Employeename { get; }
public string FirstName { get; }
public string LastName { get; }
public void Deconstruct(out string employeename, out string firstName, out string lastName)
{
employeename = Employeename;
firstName = FirstName;
lastName = LastName;
}
}
class Program
{
public static void Main()
{
Employee employee = new Employee("emp", "fname", "lname");
// 분해자를 사용하여 객체를 여러 변수로 분해
(string EName, string Fname, string Lname) = employee;
System.Console.WriteLine(EName);
System.Console.WriteLine(Fname);
System.Console.WriteLine(Lname);
Console.ReadLine();
}
}실행 결과
emp fname lname
정리
분해자는 (string EName, string Fname, string Lname) = employee;와 같은 간결한 구문으로 객체의 상태를 추출할 수 있게 해줍니다. 이를 통해 코드의 가독성이 크게 향상되며, C# 7.0의 튜플 및 패턴 매칭 기능과 함께 활용하면 더욱 효과적입니다. 데이터 전달이나 값 추출이 빈번한 코드에서 분해자를 적극적으로 활용해 보시기 바랍니다.