본문 바로가기
C#

C# Dependency Property(의존 속성)와 Attached Property

by samie 2025. 3. 29.
C# Dependency Property(의존 속성)와 Attached Property

C# Dependency Property(의존 속성)와 Attached Property

C#에서 의존 속성(Dependency Property)과 Attached Property는 WPF(Windows Presentation Foundation)에서 중요한 개념으로, UI 요소의 속성을 더 효율적으로 관리하고 상호작용을 처리하는 데 사용됩니다. 이 글에서는 두 개념의 차이점과 사용법을 설명합니다.

1. Dependency Property(의존 속성)란?

Dependency Property는 WPF에서 사용되는 특수한 종류의 속성으로, 일반적인 C#의 속성(Property)과는 다르게 여러 기능을 제공하는 속성입니다. 가장 큰 특징은 속성 값이 단순히 객체의 메모리 위치에만 저장되는 것이 아니라, WPF 시스템 내에서 다양한 기능과 연동된다는 점입니다. 예를 들어, 데이터 바인딩, 스타일, 애니메이션, 템플릿 등에 의존하며, 값이 변경되었을 때 자동으로 UI 업데이트가 가능합니다.

Dependency Property의 특징

  • UI 시스템과 통합: WPF의 다양한 기능과 자연스럽게 통합됩니다.
  • 메모리 관리: 의존 속성은 내부적으로 효율적인 메모리 관리를 제공합니다.
  • 변경 알림: 속성 값이 변경되면 자동으로 UI가 업데이트됩니다.
  • 데이터 바인딩: Dependency Property는 데이터 바인딩을 지원하며, 다른 UI 요소나 데이터를 실시간으로 반영할 수 있습니다.

Dependency Property 사용 예제

public class CustomControl : Control
{
    public static readonly DependencyProperty MyProperty = DependencyProperty.Register(
        "MyProperty", typeof(string), typeof(CustomControl), new PropertyMetadata("기본값"));

    public string MyProperty
    {
        get { return (string)GetValue(MyProperty); }
        set { SetValue(MyProperty, value); }
    }
}

위 예제에서 MyPropertyDependencyProperty로 등록되었고, 이를 사용하여 값의 변경을 UI에 반영할 수 있습니다.

2. Attached Property란?

Attached Property는 WPF에서 특정 요소에 속성을 "첨부"할 수 있는 특수한 속성입니다. 기본적으로는 다른 요소에 속성을 직접적으로 추가할 수 없는 경우에 사용됩니다. 예를 들어, Canvas.LeftGrid.Row와 같은 속성들이 대표적인 첨부 속성입니다. 첨부 속성은 WPF의 레이아웃 시스템과 상호작용하며, 다양한 컨트롤에 속성을 부여하는 데 사용됩니다.

Attached Property의 특징

  • 속성 첨부: 하나의 컨트롤에 다른 속성을 첨부할 수 있습니다.
  • UI 요소와 분리: UI 요소의 속성 외부에서 정의되며, 여러 요소에 속성 값을 적용할 수 있습니다.
  • 공통 속성 사용: 다양한 컨트롤에서 공통적으로 사용할 수 있는 속성을 정의하는 데 유용합니다.

Attached Property 사용 예제

public static class MyAttachedProperties
{
    public static readonly DependencyProperty IsHighlightedProperty =
        DependencyProperty.RegisterAttached("IsHighlighted", typeof(bool), typeof(MyAttachedProperties), new PropertyMetadata(false));

    public static void SetIsHighlighted(UIElement element, bool value)
    {
        element.SetValue(IsHighlightedProperty, value);
    }

    public static bool GetIsHighlighted(UIElement element)
    {
        return (bool)element.GetValue(IsHighlightedProperty);
    }
}

위의 예제에서 IsHighlighted는 첨부 속성으로, UIElement에 적용될 수 있습니다. 이렇게 정의된 첨부 속성은 UI 요소에 독립적으로 추가될 수 있습니다.

3. Dependency Property와 Attached Property의 차이점

  • Dependency Property는 특정 클래스에 속성으로 정의되며, UI 요소의 상태나 값을 나타내고, UI와 상호작용합니다.
  • Attached Property는 속성이 특정 요소에 첨부되어, 해당 요소의 속성 외부에서 사용됩니다. 여러 요소에 동일한 속성을 쉽게 적용할 수 있습니다.

4. 마무리

Dependency Property와 Attached Property는 C# WPF에서 매우 중요한 개념입니다. 의존 속성은 UI와 상호작용하고 데이터 바인딩과 같은 기능을 지원하는 반면, 첨부 속성은 UI 요소에 속성을 부여하여 유연한 UI 구성을 가능하게 합니다. 이 두 가지 속성은 WPF 애플리케이션을 효율적으로 개발하는 데 필수적인 도구입니다.