본문 바로가기

C#

C# 동적 프로퍼티 생성 및 바인딩

C#에서는 런타임에 동적으로 프로퍼티를 생성하고 바인딩하는 여러 방법이 있습니다. 특히, UI 개발이나 유연한 데이터 모델링 시 유용하게 사용됩니다.

1. ExpandoObject 활용하기

ExpandoObject는 동적으로 프로퍼티를 추가할 수 있는 객체입니다. 다음 예제는 ExpandoObject에 프로퍼티를 추가하고 접근하는 방법입니다.

dynamic person = new System.Dynamic.ExpandoObject();
person.Name = "홍길동";
person.Age = 30;

Console.WriteLine($"이름: {person.Name}, 나이: {person.Age}");

2. DynamicObject 상속하여 커스텀 동적 객체 만들기

DynamicObject를 상속하면, 더 세밀한 동적 멤버 제어가 가능합니다. 이를 통해 get/set 접근자를 구현할 수 있습니다.

using System.Dynamic;
using System.Collections.Generic;

public class MyDynamic : DynamicObject
{
    private Dictionary<string, object> _properties = new Dictionary<string, object>();

    public override bool TryGetMember(GetMemberBinder binder, out object result)
    {
        return _properties.TryGetValue(binder.Name, out result);
    }

    public override bool TrySetMember(SetMemberBinder binder, object value)
    {
        _properties[binder.Name] = value;
        return true;
    }
}

// 사용 예시
var dyn = new MyDynamic();
dyn.Name = "동적객체";
Console.WriteLine(dyn.Name);

3. 데이터 바인딩과 동적 프로퍼티

WPF 같은 UI 프레임워크에서 동적 프로퍼티를 바인딩하려면, INotifyPropertyChanged 구현이 필요합니다. DynamicObject와 결합해서 사용할 수도 있습니다.

예를 들어, ExpandoObject를 INotifyPropertyChanged와 결합하여 바인딩 가능한 동적 객체를 만들 수 있습니다.

정리

동적 프로퍼티 생성은 유연한 코딩을 가능케 하며, ExpandoObject나 DynamicObject를 활용해 쉽게 구현할 수 있습니다. 특히 UI 데이터 바인딩 시 유용하니 필요에 따라 적절히 활용하시기 바랍니다.